14. Pour faire durer le plaisir!
Extraire seulement les caractères de 5 à 7
Extraire les caractères à partir de 5
Savoir si une condition est Vraie ou fausse?
Est-ce que le contenu des valeurs correspond à “2019-01-01”
Connaître la longueur des valeurs d’une colonne
Compter le nombre de mots dans des cellules (séparés par des espaces)
- value.split(" ").length() ou value.split(//).length()
Calcul d’un pourcentage arrondi (ex d’un résultat sur 10)
Transformer un format date en format texte plus lisible
- value.toString(“dd MMMM yyyy”)
La création et manipulation de listes (array) - Diviser le contenu de cellules
Diviser le contenu de cellules en fonction d’un séparateur pour ne conserver que le premier élément
Diviser le contenu d’une cellules pour les réordonner
value.split(“,”).reverse().join(“,”)
value.split(“,”).sort().join(“,”)
Diviser après les 3 premiers caractères et conserve le premier élément
- value.splitByLengths(3)[0]
Diviser selon le type de caratères et retenir le deuxième élément
- value.splitByCharType()[1]
Diviser le contenu d’une cellule sur un terme x et conserver le contenu précédent
Inverser le contenu d’une cellule
Diviser le contenu d’une cellule et inverser l’ordre de présentation en ajoutant une virgule entre les deux
- value.split(’ ‘)[1] + “,” + " " + value.split(’ ’)[0]
OU
- value.match(/(.),(.)/).reverse().join(" ")
Ajouter un zéro pour avoir un nombre de caractères précis
Ajouter un zéro devant le contenu si donne une chaîne de 0 à 2 caractères
- “0”[0,2-length(value)] + value
Appliquer des conditions
Fonction if - même chose que dans excel
- if(test, si text est vrai, si text est vrai)
Si la cellule contient x, écrire x, sinon y
if(value.contains(“x”), “x”, “y”)
if(value.contains(“1”), value, null)
Comparer deux colonnes
Identifier si le contenu des cellules d’une colonne est pareil à une autre
- value == cells[‘autre-colonne’].value
Est-ce que le premier caractère de la colonne x est le même que la colonne y
- cells[“colonne1”].value[0] == cells[“colonne2”].value[0]
Comparer le contenu de deux colonnes et modifier les valeurs selon le résultat de la condition
- if(cells[“colonne1”].value == cells[“colonne2”].value, “Pareil”, “Pas pareil”)
Faire des calculs simples (valeurs numériques)
Somme d’une colonne plus une autre
- value + cells[‘Jour du mois’].value
Arrondir le contenu
Reprendre et concaténer le contenu d’une autre colonne
Créer une nouvelle colonne en fusionnant le contenu de deux autres et ajouter du texte
- cells[‘nom’].value + cells[‘nom’].value + “Bonjour!”
Créer une nouvelle colonne avec les trois premiers caractères seulement
cells[‘Symptome’].value[0,3]
Transformer le contenu d’une colonne en concaténant le contenu d’une autre
value + ’ ’ + cells[‘street-type’].value
Remplacer des caractères
Remplacer tout le contenu d’une colonne (ici, vider la colonne)
Remplacer une lettre par une autre
- value.replaceChars(“o”, “a”)
Faire plusieurs remplacements d’un coup
- value.replace(“1”, “un”).replace(“2”, “deux”).replace(“3”, “trois”)
Identifier des cellules qui commencent par… (résultat booléen)
- value.startsWith(“Berri”)
Supprimer un caractère de début ou fin de valeur:
Supprime “S” du début de la cellule
- value.replace(/^S/,"") [regex ^ indique le début d’une cellule]
Supprime “.” à la fin de la cellule
- value.replace(/.$/,"") [regex $ indique la fin d’une cellule]
Extraire seulement une partie d’une date
value.toDate().datePart(“year”)
diff(now(),value,‘weeks’)
LS0tDQp0aXRsZTogIk9wZW5SZWZpbmUiDQphdXRob3I6ICJDYXJvbGluZSBQYXRlbmF1ZGU8L2JyPkJpYmxpdGjDqHF1ZSBkZXMgbGV0dHJlcyBldCBzY2llbmNlcyBodW1haW5lcywgVW5pdmVyc2l0w6kgZGUgTW9udHLDqWFsPC9icj5jYXJvbGluZS5wYXRlbmF1ZGVAdW1vbnRyZWFsLmNhIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyb2JvYm9vazoNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIGhpZ2hsaWdodDoga2F0ZQ0KICAgIHRodW1ibmFpbHM6IGZhbHNlDQogICAgbGlnaHRib3g6IHRydWUNCiAgICBnYWxsZXJ5OiB0cnVlDQogICAgdG9jX2RlcHRoOiAyDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIG1hdGhqYXg6IG51bGwNCiAgICBkZl9wcmludDogcGFnZWQNCi0tLQ0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkocm1kZm9ybWF0cykNCg0KIyMgR2xvYmFsIG9wdGlvbnMNCm9wdGlvbnMobWF4LnByaW50PSI3NSIpDQpvcHRzX2NodW5rJHNldChlY2hvPUZBTFNFLA0KCSAgICAgICAgICAgICBjYWNoZT1UUlVFLA0KICAgICAgICAgICAgICAgcHJvbXB0PUZBTFNFLA0KICAgICAgICAgICAgICAgdGlkeT1UUlVFLA0KICAgICAgICAgICAgICAgY29tbWVudD1OQSwNCiAgICAgICAgICAgICAgIG1lc3NhZ2U9RkFMU0UsDQogICAgICAgICAgICAgICB3YXJuaW5nPUZBTFNFKQ0Kb3B0c19rbml0JHNldCh3aWR0aD03NSkNCmBgYA0KDQoNCg0KIVtdKGltYWdlcy9PUi1sb2dvLmpwZykgDQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIE9iamVjdGlmcw0KDQo8ZGl2IGNsYXNzID0gInJpZ2h0Ij4NCjxpbWcgc3JjPSJpbWFnZXMvT1IxNi5qcGciIHdpZHRoPSIyNTBweCIgLz4NCjwvZGl2Pg0KDQotIENvbXByZW5kcmUgbGUgZm9uY3Rpb25uZW1lbnQgZHUgbG9naWNpZWwuDQotIEltcG9ydGVyIGV0IGV4cGxvcmVyIHVuIGpldSBkZSBkb25uw6llcy4gDQotIE1hbmlwdWxlciBldCB0cmFuZm9ybWVyIGRlcyBkb25uw6llcy4NCi0gUydpbml0aWVyIMOgIGwndXNhZ2UgZHUgbGFuZ2FnZSBHUkVMLg0KPC9icj4NCjwvYnI+DQo8L2JyPg0KPC9icj4NCjwvYnI+DQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyAxLiBQcsOpbGltaW5haXJlcw0KIyMgRGVzIGRvbm7DqWVzIGJpZW4gb3Jkb25uw6llcyBjb21tZW5jZW50IHBhciBzb2ktbcOqbWUhDQoNCg0KLSBMZSBuZXR0b3lhZ2UgZGUgZmljaGllcnMgZGUgZG9ubsOpZXMgZXN0IHVuZSB0w6JjaGUgc291dmVudCBsb25ndWUgZXQgZW5ubnV5ZXVzZSBtYWlzIGluY29udG91cm5hYmxlIGF2YW50IHRvdXRlIGFuYWx5c2Ugb3UgZGlmZnVzaW9uIGRlIGRvbm7DqWVzLg0KDQotIEwnYW1wbGV1ciBkZSBjZXR0ZSB0w6JjaGUgZMOpcGVuZHJhIGRlIGwnw6l0YXQgZGVzIGRvbm7DqWVzIGV0IGR1IHR5cGUgZGUgbG9naWNpZWwgcXVpIHNlcmEgZW5zdWl0ZSB1dGlsaXPDqSDDoCBkZXMgZmlucyBkJ2FuYWx5c2Ugb3UgZGUgdmlzdWFsaXNhdGlvbiAoUiwgU1BTUywgU3RhdGEsIFRhYmxlYXUsIEFyY0dJUy4uLikNCg0KPC9icj4NCg0KIyMjIyBQcm9ibMOobWVzIGNvdXJhbnRzIHJlbGF0aWZzIMOgIGxhIGZvcm1lIGV0L291IGF1IGNvbnRlbnUgZCd1biBqZXUgZGUgZG9ubsOpZXM6DQoNCi0gUHJvYmzDqG1lcyBkJ2VudMOqdGVzIGV0IGRlIG5vbXMgZGUgdmFyaWFibGVzLg0KLSBDZWxsdWxlcyBmdXNpb25uw6llcywgcXVpIGNvbnRpZW5uZW50IGRpZmbDqXJlbnRlcyBpbmZvcm1hdGlvbnMuDQotIFZhcmlhYmxlcyBxdWkgbmUgc29udCBwYXMgY2xhaXJlbWVudCBkw6lmaW5pZXMgw6AgbGEgdmVydGljYWxlLg0KLSBDb250ZW51IHRleHR1ZWwgbm9uIHN0cnVjdHVyw6kuDQotIFByb2Jsw6htZXMgZGUgZm9ybWF0cywgZGUgInBldGl0cyBjYXJhY3TDqHJlcyIgLT4gc8OpcGFyYXRldXJzL2TDqWxpbWl0ZXVycyBkZSBjb250ZW51IGV0IGRlIGNvbG9ubmVzLCBndWlsbGVtZXRzLCBlbmNvZGFnZSAoJycgIHx8IHwgIiIgLCAuIDsgKQ0KLSBQcsOpc2VuY2UgZGUgY2VsbHVsZXMgdmlkZXMsIGVzcGFjZXMuLi4NCg0KW0EgY2FzZSBzdHVkeSBpbiBtZXNzeSBkYXRhIGFuYWx5c2lzOiB0aGUgQXVzdHJhbGlhbiBzYW1lLXNleCBtYXJyaWFnZSBzdXJ2ZXldKGh0dHBzOi8vYmxvZy5yZXZvbHV0aW9uYW5hbHl0aWNzLmNvbS8yMDE3LzEyL3NleC1tYXJyaWFnZS1zdXJ2ZXkuaHRtbCkNCg0KPGNlbnRlcj4NCg0KIVtdKGltYWdlcy9PUjkuanBnKXt3aWR0aD02MCV9ICANCg0KPC9jZW50ZXI+DQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQpBdmFudCBkJ3V0aWxpc2VyIHNlcyBkb25uw6llcyBkYW5zIGxlIGxvZ2ljaWVsIGRlIHNvbiBjaG9peCwgbGUgbmV0dG95YWdlIGRlIHNlcyBkb25uw6llcyBwZXV0IGRvbmMgaW5jbHVyZSBkZSBub21icmV1c2VzIHTDomNoZXMgY29tbWU6DQoNCjxkaXYgY2xhc3MgPSAicmlnaHQiPg0KPGltZyBzcmM9ImltYWdlcy9ib3R0bGUucG5nIiB3aWR0aD0iMTc1cHgiIC8+DQo8L2Rpdj4NCi0gTW9kaWZpZXIgbCdlbmNvZGFnZS4NCi0gU3VwcHJpbWVyIGxlcyBkb3VibG9ucy4NCi0gRGl2aXNlciBsZXMgY2VsbHVsZXMgY29tcG9zw6llcyBkZSB2YWxldXJzIG11bHRpcGxlcy4gICANCi0gUmVjb2RlciBsZXMgdmFsZXVycyBtYW5xdWFudGVzLg0KLSBSZXDDqXJlciBsZXMgZXJyZXVycyBkZSBzYWlzaWUsIGxlcyB2YWxldXJzIGFiZXJyYW50ZXMuLi4NCi0gRnVzaW9ubmVyIGRlcyBmaWNoaWVycy4NCi0gRnVzaW9ubmVyIGRlcyBjb2xvbm5lcy4NCi0gQWdyw6lnZXIgZGVzIHZhbGV1cnMgZGUgdmFyaWFibGVzLg0KLSBDcsOpZXIgZGVzIHZhcmlhYmxlcy4NCi0gQ2hhbmdlciBsZSBmb3JtYXQgZGVzIHZhcmlhYmxlcy4NCi0gQ2hhbmdlciBsZSBmb3JtYXQgZHUgZmljaGllci4NCi0gVHJhbnNmb3JtZXIgbGVzIGNvbG9ubmVzIGVuIHJhbmfDqWVzIChmb3JtYXQgIndpZGUiIGVuICJsb25nIikuDQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIDIuIFBvdXJxdW9pIE9wZW5SZWZpbmU/DQoNCi0gUGx1c2lldXJzIGxhbmdhZ2VzIGRlIHByb2dyYW1tYXRpb24gZXQgb3V0aWxzIGQnYW5hbHlzZSBvdSBkZSBnZXN0aW9uIGRlIGRvbm7DqWVzIHBldXZlbnQgw6p0cmUgdXRpbGlzw6lzIG1haXMgT3BlblJlZmluZSBhIMOpdMOpIGNyw6nDqSBzcMOpY2lmaXF1ZW1lbnQgcG91ciBmYWlyZSBsZSBtw6luYWdlIQ0KDQotIFBsdXMgZmFjaWxlIHF1ZSBSIGV0IHBsdXMgZWZmaWNhY2UgcXUnRXhjZWwuDQoNCi0gUGVybWV0IGRlIGZhY2lsZW1lbnQgaWRlbnRpZmllciBldCBkZSBjb3JyaWdlciBlbiBsb3QgZGVzIGRvbm7DqWVzIGluY29tcGzDqHRlcywgbWFucXVhbnRlcywgZXJyb25uw6llcywgaW5jb2jDqXJlbnRlcywgbm9uIHBlcnRpbmVudGVzLCBtYWwgZm9ybWF0dMOpcywgcXUnZWxsZXMgc29pZW50IG51bcOpcmlxdWVzIG91IHRleHR1ZWxsZXMgPT4gc2F1dmUgdGVtcHMgZXQgw6luZXJnaWUuDQoNCg0KPGNlbnRlcj4gICANCg0KPGltZyBzcmM9ImltYWdlcy8xOTE4LUFkLTg2MC04NjB4NTczLmpwZyIgd2lkdGg9IjYwJSIvPg0KDQo8L2NlbnRlcj4gICANCg0KDQo8L2JyPg0KDQojIyMgRm9uY3Rpb25zIHNww6ljaWFsaXPDqWVzIHBvdXI6DQoNCi0gKkV4cGxvcmVyKiBzZXMgZG9ubsOpZXMgc291cyB0b3VzIHNlcyBhbmdsZXMgKGdyw6JjZSDDoCBkZXMgZmlsdHJlcywgdHJpcywgZmFjZXR0ZXMsIHJlZ3JvdXBlbWVudHMpLiAgIA0KLSAqTmV0dG95ZXIqIDogcmVwcsOpcmVyIGRlcyBlcnJldXJzLCBtb2RpZmllciBsZSBjb250ZW51IGRlcyBjZWxsdWxlcy4uLg0KLSAqVHJhbmZvcm1lciogOiBjaGFuZ2VyIGZvcm1hdHMgZGUgc2VzIHZhcmlhYmxlcywgY3LDqWVyIGRlIG5vdXZlbGxlcyB2YXJpYWJsZXMgc3VyIGxhIGJhc2UgZGVzIGNvbG9ubmVzIHByw6lzZW50ZXMuLi4NCi0gKkVucmljaGlyKiA6IGZ1c2lvbm5lciBkZXMgZmljaGllcnMsIGltcG9ydGVyIGRlcyBkb25uw6llcyBlbiBsaWduZSAoQVBJLCBVUkxzKSwgcsOpY29uY2lsaWF0aW9uIChXaWtpZGF0YSBldCBbYXV0cmVzIHNvdXJjZXMgZXh0ZXJuZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9SZWNvbmNpbGFibGUtRGF0YS1Tb3VyY2VzKSkuLi4NCi0gKkF1dG9tYXRpc2VyKiAocsOpdXRpbGlzZXIgc29uIGhpc3RvcmlxdWUgZGUgbWFuaXB1bGF0aW9ucykNCg0KPC9icj4NCg0KKioqDQoNCjwvYnI+DQoNCiMjIDIuMS4gRXhlbXBsZXMgZCd1dGlsaXNhdGlvbg0KDQpIYXJtb25pc2VyLCBzdGFuZGFyZGlzZXIsIHVuaWZvcm1pc2VyLi4uDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjguanBnKSAgIA0KDQo8L2NlbnRlcj4gIA0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMgMi4yLiBQb3VyIGF2b2lyIGRlIGJlbGxlcyBkb25uw6llcyAqdGlkeSoNCg0KUGVybWV0IGQnYXBwbGlxdWVyIGxlcyBwcmluY2lwZXMgZHUgW1RpZHlkYXRhXShodHRwczovL3I0ZHMuaGFkLmNvLm56L3RpZHktZGF0YS5odG1sKSANCg0KPiDigJxUaWR5IGRhdGFzZXRzIGFyZSBhbGwgYWxpa2UsIGJ1dCBldmVyeSBtZXNzeSBkYXRhc2V0IGlzIG1lc3N5IGluIGl0cyBvd24gd2F5LuKAnSDigJPigJMgSGFkbGV5IFdpY2toYW0NCg0KPC9icj4NCg0KKipUcm9pcyBwcmluY2lwZXMgZGUgYmFzZToqKg0KDQoxLiBDaGFxdWUgY29sb25uZSBlc3QgdW5lICoqdmFyaWFibGUqKi4NCjIuIENoYXF1ZSBsaWduZSBlc3QgdW5lICoqb2JzZXJ2YXRpb24qKi4NCjMuIENoYXF1ZSBjZWxsdWxlIMOgICoqdW5lIHNldWxlIHZhbGV1cioqLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxMC5qcGcpIA0KDQo8L2NlbnRlcj4gIA0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMgMi4zLiAgUHJpbmNpcGFsZXMgY2FyYWN0w6lyaXN0aXF1ZXMNCg0KLSBMb2dpY2llbCBncmF0dWl0IGV0IG91dmVydCB1dGlsaXPDqSBwYXIgdW5lIGxhcmdlIGNvbW11bmF1dMOpLg0KDQotIENyw6nDqSBlbiAyMDEwICgqRnJlZWJhc2UgR3JpZHdvcmtzKiksIHJhY2hldMOpIHBhciBHb29nbGUgZW4gMjAxMCAoKkdvb2dsZSBSZWZpbmUqKSwgcHVpcyBvdXZlcnR1cmUgZHUgY29kZSBlbiAyMDEyIGV0IHJlcHJpcyBwYXIgY29tbXVuYXV0w6kgcXVpIGxlIGTDqXBsYWNlIHN1ciBHaXRodWIgZXQgZGV2aWVudCAqT3BlblJlZmluZSouDQoNCi0gTXVsdGlwbGF0ZWZvcm1lczogV2luZG93cywgTWFjLCBMaW51eC4NCg0KLSBJbnRlcmZhY2Ugc2VtYmxhYmxlIMOgIHVuIHRhYmxldXIgY29tbWUgZXhjZWwgbWFpcyBkb250IGxlIGZvbmN0aW9ubmVtZW50IHMnYXBwYXJlbnRlIHBsdXMgw6AgdW5lIGJhc2UgZGUgZG9ubsOpZXMgKHBhciBleGVtcGxlIGxlcyB0cmFpdGVtZW50cyBzb250IHPDqXBhcsOpcyBkZXMgZG9ubsOpZXMsIGllIGxlcyBmb3JtdWxlcyBuZSBzb250IHBhcyBlbnJlZ2lzdHLDqWVzIGRhbnMgbGVzIGNlbGx1bGVzIG1haXMgZGFucyB1biBzY3JpcHQpLg0KDQotIEFzc29jaWUgbGEgZmFjaWxpdMOpIGQndXNhZ2UgZCd1biBsb2dpY2llbCBjb21tZSBleGNlbCDDoCBsYSBsYSBwdWlzc2FuY2UgZCdvdXRpbHMgZGUgcHJvZ3JhbW1hdGlvbiBldCBkJ2FsZ29yaXRobWVzLg0KDQotIFVzYWdlIGRlIGwnKippbnRlcmZhY2UgZ3JhcGhpcXVlKiogZXQvb3UgKipzY3JpcHRzIEdSRUwqKiAoKkdvb2dsZSBSZWZpbmUgRXhwcmVzc2lvbiBMYW5ndWFnZSopOiBwcm9wb3NlIHVuIGVuc2VtYmxlIGRlIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIGRvbmMgbmUgbsOpY2Vzc2l0ZSDDoCBsYSBiYXNlIGF1Y3VuZSBjb21ww6l0ZW5jZSBlbiBwcm9ncmFtbWF0aW9uIG91IGFuYWx5c2UsIG1haXMgbCd1c2FnZSBkdSBsYW5nYWdlIHBlcm1ldCBkJ2FsbGVyIGJlYXVjb3VwIHBsdXMgbG9pbi4NCg0KLSBQYXJ0aWN1bGnDqHJlbWVudCBwdWlzc2FudCBwb3VyIGxlIG5ldHRveWFnZSBkZSB0YWJsZSBkZSBkb25uw6llcyBhdmVjIGR1IGNvbnRlbnUgdGV4dHVlbC4NCg0KLSAqKlJlcHJvZHVjdGliaWxpdMOpKiohIFBlcm1ldCBkZSBnYXJkZXIgdW4gaGlzdG9yaXF1ZSBkZSB0b3V0ZXMgbGVzIG1hbmlwdWxhdGlvbnMgZWZmZWN0dcOpZXMgc3VyIHNlcyBkb25uw6llcyBhZmluIGRlIGxlcyBwYXJ0YWdlciwgZGUgbGVzIHLDqXV0aWxpc8OpZXMgc3VyIGQnYXV0cmVzIGRvbm7DqWVzLi4uDQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAibm90ZSI+DQoNCioqw4Agbm90ZXIqKiANCg0KT3BlblJlZmluZSBuJ2VzdCBwYXMgdW4gb3V0aWwgZCdhbmFseXNlIG91IGRlIHZpc3VhbGlzYXRpb24gZXQgbmUgcGVybWV0IHBhcyBkZSBjcsOpZXIgdW4gamV1IGRlIGRvbm7DqWVzIMOgIHBhcnRpciBkZSB6w6lyby4gQ2Ugbidlc3QgcGFzIHVuIG91dGlsIGRlIHJlbXBsYWNlbWVudCBtYWlzIGNvbXBsw6ltZW50YWlyZS4NCg0KPC9kaXY+DQoNCg0KPC9icj4NCg0KKioqDQoNCjwvYnI+DQoNCiMgMy4gSW5zdGFsbGF0aW9uIGV0IGZvbmN0aW9ubmVtZW50IGfDqW7DqXJhbA0KDQotIFtUw6lsw6ljaGFyZ2VyIGV0IGTDqXppcHBlcl0oaHR0cHM6Ly9vcGVucmVmaW5lLm9yZy9kb3dubG9hZC5odG1sKSBsZSBsb2dpY2llbCBkYW5zIHVuIGRvc3NpZXIgZGUgc29uIGNob2l4Lg0KDQotIENyw6llciBlbiBsYW5nYWdlIEphdmEgW2RvbmMgbsOpY2Vzc2l0ZSBsJ2luc3RhbGxhdGlvbiBkZSBKYXZhICg2NCBiaXRzIGRlIHByw6lmw6lyZW5jZSldKGh0dHBzOi8vd3d3LmphdmEuY29tL2VuL2Rvd25sb2FkLykuDQoNCi0gUHLDqWbDqXJhYmxlIGRlIGTDqWZpbmlyIENocm9tZSBvdSBGaXJlZm94IGNvbW1lIG5hdmlnYXRldXIgcGFyIGTDqWZhdXQgKG5lIGZvbmN0aW9ubmUgcGFzIGRhbnMgSUUpLiAgDQoNCi0gTGUgZm9uY3Rpb25uZW1lbnQgZCdPcGVuUmVmaW5lIHBldXQgw6p0cmUgdW4gcGV1IGTDqXJvdXRhbnQgYXUgZMOpcGFydCBjYXIgaWwgbid5IGEgcGFzIGQnaW5zdGFsbGF0aW9uIGVuIGJvbm5lIGV0IGR1ZSBmb3JtZSBjb21tZSBwb3VyIHVuIGxvZ2ljaWVsIHLDqWd1bGllci4NCg0KLSBQb3VyIGTDqW1hcnJlciBsZSBsb2dpY2llbCwgY2xpcXVlciBzdXIgbGUgZmljaGllciBgYCBgb3BlbnJlZmluZS5leGVgIGBgIG91IGByZWZpbmUuYmF0YC4gSWwgZXN0IHV0aWxlIGRlIGZhaXJlIHVuIGNsaWMtZHJvaXQgc3VyIGxlIGZpY2hpZXIgLmV4ZSBwb3VyIGwnw6lwaW5nbGVyIGRhbnMgc2EgYmFycmUgZGUgdMOiY2hlcyAoU3VyIE1hYywgZMOpcGxhY2VyIGwnaWNvbmUgT3BlblJlZmluZSBkYW5zIGxlIGRvc3NpZXIgZCdhcHBsaWNhdGlvbnMgZXQgZG91YmxlIGNsaXF1ZXIgc3VyIGNlbGxlLWNpKS4NCg0KLSBVbmUgZmVuw6p0cmUgZGUgY29tbWFuZGUgbm9pcmUgcydvdXZyaXJhIGV0IGxhbmNlcmEgbCdvdXZlcnR1cmUgZCd1biBvbmdsZXQgZGFucyBsZSBuYXZpZ2F0ZXVyIHdlYi4gIA0KDQotIExhIGZlbsOqdHJlIGRlIGNvbW1hbmRlcyBwZXV0IGVuc3VpdGUgw6p0cmUgaWdub3LDqSBtYWlzIE5FIFBBUyBMQSBGRVJNRVIhIEVsbGUgbmUgc2VydmlyYSBxdSfDoCBmZXJtZXIgbGEgc2Vzc2lvbiBkZSB0cmF2YWlsLiAgDQoNCi0gU2kgbGUgbmF2aWdhdGV1ciBuZSBzJ291dnJlIHBhcyBhdXRvbWF0aXF1ZW1lbnQsIHNhaXNpciBsJ2FkcmVzc2UgaHR0cDovLzEyNy4wLjAuMTozMzMzLyBvdSBodHRwOi8vbG9jYWxob3N0OjMzMzMgZGFucyB1biBvbmdsZXQuIA0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxNy5qcGcpe3dpZHRoPTgwJX0NCg0KPC9jZW50ZXI+ICANCg0KPC9icj4NCg0KKioqDQoNCjwvYnI+DQoNCiMjIDMuMS4gVHJhdmFpbCBsb2NhbA0KDQotIFJlcG9zZSBkb25jIHN1ciBkZXV4IGNvbXBvc2FudGVzOiB1biAqKnNldmV1ciB3ZWIgbG9jYWwqKiBldCB1biAqKm9uZ2xldCBkZSBuYXZpZ2F0ZXVyIHdlYioqIHBvaW50YW50IHZlcnMgbCdhZHJlc3NlIGR1IHNlcnZldXIgc3VyIHNvbiBwb3N0ZS4NCg0KLSBMZSB0cmF2YWlsIHNlIGZhaXQgZGFucyB1biBvbmdsZXQgZGUgbmF2aWdhdGV1ciBxdWkgZXN0IHVuZSBzaW1wbGUgaW50ZXJmYWNlIGdyYXBoaXF1ZSBwb3VyIGludGVyYWdpciBhdmVjIGNlIHNlcnZldXIgbG9jYWwgbWFpcyAqKmxlcyBkb25uw6llcyBuZSBzb250IHBhcyBzdXIgbGUgIm51YWdlIioqLg0KDQotIFRyYXZhaWwgbG9jYWwgZG9uYyBwYXMgZCdlbnZpcm9ubmVtZW50IGNvbGxhYm9yYXRpZi4gDQoNCi0gTGVzIGZpY2hpZXJzIHByb2dyYW1tZXMgc2UgdHJvdXZlcm9udCBkYW5zIGxlIGRvc3NpZXIgZCdpbnN0YWxsYXRpb24gZXQgbGVzIGZpY2hpZXJzIGRlIHByb2pldHMgZGFucyBsZSAqd29ya3NwYWNlIGRpcmVjdG9yeSouDQoNCi0gT3BlblJlZmluZSBuZSBtb2RpZmllIHBhcyBsZSBmaWNoaWVyIG9yaWdpbmFsLCBpbCB0cmF2YWlsbGUgw6AgcGFydGlyIGQndW5lICoqY29waWUgZW4gbcOpbW9pcmUgc3RvY2vDqWUgZW4gYXJjaGl2ZXMqKiBkYW5zIGxlIHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwuDQoNCi0gTGUgcHJvamV0IGVzdCBlbnJlZ2lzdHLDqSBlbiBmb3JtYXQgT3BlblJlZmluZSBhdXRvbWF0aXF1ZW1lbnQgZGFucyBsZSBkb3NzaWVyIGRlIHRyYXZhaWwgY2hhcXVlIDUgbWludXRlcyAoW3BldXQgw6p0cmUgbW9kaWZpw6ldKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvcnVubmluZyNqdm0tcHJlZmVyZW5jZXMpKS4NCg0KLSBMZSBmaWNoaWVyIGRlIGRvbm7DqWVzIHVuZSBmb2lzIG5ldHRvecOpIHBvdXJyYSDDqnRyZSBleHBvcnTDqSBlbiBkaWZmw6lyZW50cyBmb3JtYXRzIGV0IGwnaGlzdG9yaXF1ZS9zeW50YXhlIHBvdXJyYSDDqnRyZSBleHRyYWl0IGVuIGZvcm1hdCBKU09OIGV0IGVucmVnaXN0csOpIGRhbnMgdW4gZmljaGllciB0eHQuDQoNCi0gUG91ciBmZXJtZXIgbGEgc2Vzc2lvbiBkZSB0cmF2YWlsIGNvcnJlY3RlbWVudCwgZmFpcmUgYEN0cmwgKyBjYCBkYW5zIGZlbsOqdHJlIGRlIGNvbW1hbmRlIChwZXV0IMOqdHJlIG7DqWNlc3NhaXJlIGRlIGxlIGZhaXJlIHBsdXMgZCd1bmUgZm9pcykgPSBlbnJlZ2lzdHJlIGxlIHByb2pldCBldCBmZXJtZSBsZSBzZXJ2ZXVyLg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KKirDgCBub3RlcioqICANCi0gUGVybWV0IGRlIHRyYXZhaWxsZXIgc3VyIGRlIGdyb3MgZmljaGllcnMgbWFpcyBsYSB0YWlsbGUgcG9zc2libGUgZXN0IHRvdXQgZGUgbcOqbWUgbGltaXTDqWUsIGxhIHBlcmZvcm1hbmNlIHBldXQgZGV2ZW5pciBwcm9ibMOpbWF0aXF1ZSDDoCBwbHVzaWV1cnMgY2VudGFpbmVzIGRlIG1pbGxpZXJzIGRlIGxpZ25lcyAodG91dCBkw6lwZW5kYW50IGR1IG5vbWJyZSBkZSBjb2xvbm5lcykgZG9uYyBwYXMgdnJhaW1lbnQgZMOpdmVsb3Bww6kgcG91ciBmYWlyZSBkdSBiaWcgZGF0YS4NCi0gVHJhdmFpbGxlIGF2ZWMgMUdCIGRlIG3DqW1vaXJlIHBhciBkw6lmYXV0LiDDgCBwbHVzIGRlIDEwMCAwMDAgbGlnbmVzLCBpbCBwZXV0IMOqdHJlIHByw6lmw6lyYWJsZSBkJ1thdWdtZW50ZXIgbGEgbcOpbW9pcmVdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvaW5zdGFsbGluZyNpbmNyZWFzaW5nLW1lbW9yeS1hbGxvY2F0aW9uKSBkZSB0cmF2YWlsOiAgDQogIC0gT3V2cmlyIGxlIGZpY2hpZXIgcmVmaW5lLmluaSBkYW5zIG5vdGVwYWQgZXQgbW9kaWZpZXIgbGEgbGlnbmUgUkVGSU5FX01FTU9SWSA9IHBhcmFtZXRyZS4gIA0KICAtIFBhciBsYSBzdWl0ZSBsYW5jZXIgT1IgYXZlYyBsZSBmaWNoaWVyICpyZWZpbmUuYmF0KiBldCBub24gKm9wZW5yZWZpbmUuZXhlICouICAgDQoNCjwvZGl2Pg0KPC9icj4NCg0KKioqDQoNCjwvYnI+DQoNCiMjIDMuMi4gw4ljcmFuIGQnYWNjdWVpbA0KDQotIMOAIHBhcnRpciBkdSBtZW51IGRlIGdhdWNoZSBpbCBlc3QgcG9zc2libGUgZGUgYENyw6llciB1biBwcm9qZXRgLCBgT3V2cmlyIHVuIHByb2pldGAgKGhpc3RvcmlxdWUgZGVzIHByb2pldHMgZW5yZWdpc3Ryw6lzKSBvdSBgSW1wb3J0ZXIgdW4gcHJvamV0IGAgKGFyY2hpdmVzIC56aXAgc2UgdHJvdXZhbnQgZGFucyBsZSBkb3NzaWVyIGRlIHRyYXZhaWwpLiAgIA0KDQotIFBvdXIgY2hhbmdlciBsYSBsYW5ndWUgZGUgbCdpbnRlcmZhY2UgYXUgZnJhbsOnYWlzLCBjbGlxdWVyIHN1ciBsJ29uZ2xldCBgTGFuZ3VlYCBkYW5zIGxlIG1lbnUgZGUgZ2F1Y2hlLiAgDQoNCi0gTGUgZmljaGllciBwZXV0IMOqdHJlIGNyw6nDqSDDoCBwYXJ0aXIgZGUgZGlmZsOpcmVudGVzIHNvdXJjZXM6IGBDZXQgb3JkaW5hdGV1cmAgKHBvc3RlIGxvY2FsKSwgYEFkcmVzc2VzIHdlYiAoVVJMcylgLCBgUHJlc3NlLXBhcGllcmAgKGNvcGnDqS1jb2xsw6kpLCBgR29vZ2xlIGRhdGFgIChHb29nbGUgc2hlZXRzKS4uLikgZXQgZW4gZGlmZsOpcmVudHMgZm9ybWF0cyAoLmNzdiwgLnR4dCwgLnhtbCwgLnhscywgLkpTT04sIC56aXAgZXQgbm9uIHRhci4uLiAoY2VydGFpbmVzIGV4dGVuc2lvbnMgcGVybWV0dGVudCBsJ3VzYWdlIGQnYXV0cmVzIGZvcm1hdHMgY29tbWUgcmRmKS4gIA0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxLmpwZykgIA0KDQo8L2NlbnRlcj4gIA0KDQotIERldXggZmljaGllcnMgb3UgcGx1cyBwZXV2ZW50IMOqdHJlIGltcG9ydMOpcyBlbiBtw6ptZSB0ZW1wcy4gTGVzIGxpZ25lcyBzZXJvbnQgaW1wb3J0w6llcyB1bmUgw6AgbGEgc3VpdGUgZGUgbCdhdXRyZSBzZWxvbiBsJ29yZHJlIGQnaW1wb3J0YXRpb24gKHVuZSBjb2xvbm5lIHBlcm1ldHRhbnQgZCdpZGVudGlmaWVyIGxlIGZpY2hpZXIgc291cmNlIHNlcmEgY3LDqcOpZSBhdXRvbWF0aXF1ZW1lbnQpLiANCg0KPC9icj4NCg0KKioqDQoNCjwvYnI+DQoNCiMjIDMuMy4gSGlzdG9yaXF1ZSBkZXMgcHJvamV0cw0KDQotIEwnb25nbGV0IGBPdXZyaXIgdW4gcHJvamV0YCBwZXJtZXQ6DQogIC0gZCdhY2PDqWRlciBldCBkJ291dnJpciB0b3VzIGxlcyBwcm9qZXRzIGVucmVnaXN0csOpcyBsb2NhbGVtZW50Lg0KICAtIGQnw6lkaXRlciBzZXMgbcOpdGFkb25uw6llcy4NCiAgLSBkJ2FjY8OpZGVyIGF1IGRvc3NpZXIgZGUgdHJhdmFpbCAoZMOpZmluaSBwYXIgZMOpZmF1dCkgb8O5IE9wZW5SZWZpbmUgc3RvY2tlIGxlcyBhcmNoaXZlcyBkZXMgcHJvamV0cyBlbnJlZ2lzdHLDqXMgcGFyIGxlIGJpYWlzIGR1IGxpZW4gYFBhcmNvdXJpciBsZSBkb3NzaWVyIGRlIGwnZXNwYWNlIGRlIHRyYXZhaWxgLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IzLmpwZykNCg0KPC9jZW50ZXI+ICANCg0KPC9icj4NCg0KKioqDQoNCjwvYnI+DQoNCiMgNC4gQ3LDqWVyIHVuIHByb2pldA0KDQotIFBvdXIgb3V2cmlyIHVuIGZpY2hpZXIgw6AgcGFydGlyIGRlIHNvbiBwb3N0ZSwgY2xpcXVlciBzdXIgYENyw6llciB1biBwcm9qZXRgIC0gPiBgQ2V0IG9yZGluYXRldXJgIC0gPiBgc8OpbGVjdGlvbm5lciBmaWNoaWVyc2Agc3VyIHNvbiAgcG9zdGUgLT4gYFN1aXZhbnRgLiAgDQoNCi0gVW5lIGZlbsOqdHJlIHMnb3V2cmUgZW5zdWl0ZSBwb3VyIHBlcm1ldHRyZSBkZSBwcsOpLXZpc3VhbGlzZXIgc29uIGpldSBkZSBkb25uw6llcyBldCBkZSBtb2RpZmllciwgc2kgbsOpY2Vzc2FpcmUsIGxlcyBvcHRpb25zIGQnaW1wb3J0YXRpb24gZW4gZm9uY3Rpb24gZGVzIGNhcmFjdMOpcmlzdGlxdWVzIGR1IGZpY2hpZXIgZGUgZG9ubsOpZXM6IG1vZGlmaWNhdGlvbiBkdSBmb3JtYXQgZGUgZmljaGllciBzJ2lsIG4nYSBwYXMgw6l0w6kgaWRlbnRpZmnDqSBjb3JyZWN0ZW1lbnQgKDUpLCBsJ2VuY29kYWdlIGRlcyBjYXJhY3TDqHJlcyBbVVRGLThdICg2KSwgbGUgdHJhaXRlbWVudCBkZXMgZW50w6p0ZXMgZXQgcHJlbWnDqHJlcyBsaWduZXMgKDkpLi4uDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IyLmpwZykgIA0KPC9icj4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gQ3LDqWVyIHVuIG5vdXZlYXUgcHJvamV0IGVuIGltcG9ydGFudCBsZSBmaWNoaWVyIGBJbmNpZGVudHMgbcOpdHJvLmNzdmAgZGlzcG9uaWJsZSBzdXIgbGUgc2l0ZSBbRG9ubsOpZXMgb3V2ZXJ0ZXMgTW9udHLDqWFsXShodHRwczovL2Rvbm5lZXMubW9udHJlYWwuY2Evc29jaWV0ZS1kZS10cmFuc3BvcnQtZGUtbW9udHJlYWwvaW5jaWRlbnRzLWR1LXJlc2VhdS1kdS1tZXRybykgKHZvaXIgYXVzc2kgbGUgc2l0ZSBkZSBsYSBTVE0gW0luZGljYXRldXJzIGRlIHBlcmZvcm1hbmNlIHJlbGnDqXMgYXUgc2VydmljZSBtw6l0cm9dKGh0dHA6Ly93d3cuc3RtLmluZm8vZnIvYS1wcm9wb3MvaW5mb3JtYXRpb25zLWVudHJlcHJpc2UtZXQtZmluYW5jaWVyZXMvZXhwZXJpZW5jZS1jbGllbnQvaW5kaWNhdGV1cnMtZGUtcGVyZm9ybWFuY2UtcmVsaWVzKSkNCg0KLSBFeHBsb3JlciBsZXMgb3B0aW9ucyBkJ2ltcG9ydGF0aW9uIC0+IFBvcnRlciB1bmUgYXR0ZW50aW9uIHBhcnRpY3VsacOocmVzIGF1eCBvcHRpb25zOiBgU3VwcHJpbWVyIGxlcyBlc3BhY2VzYCAoOCAtPiBjb2NoZXIpLCAJYFV0aWxpc2VyIGxlIGNhcmFjdMOocmUJIiBwb3VyIGZlcm1lciBsZXMgY2VsbHVsZXMgY29udGVuYW50IGxlcyBzw6lwYXJhdGV1cnMgZGUgY29sb25uZXNgICgxMCAtPiBjb2NoZXIgb3Ugbm9uKSwgYEFuYWx5c2VyIGxlIHRleHRlIGRlcyBjZWxsdWxlcyBjb21tZSBub21icmVzICwgZGF0ZXPigKZgICgxMSAtPiBkw6ljb2NoZXIpDQoNCi0gQ2hhbmdlciBsZSBgTm9tIGR1IHByb2pldGAgWzJdIGV0IGNsaXF1ZXIgc3VyIGBDcsOpZXIgdW4gcHJvamV0YCBbNF0gLSBFbiBjYXMgZGUgcHJvYmzDqG1lLCBpbCBlc3QgcG9zc2libGUgZGUgcmVjb21tZW5jZXIgbGUgcHJvY2Vzc3VzIFsxXS4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyA1LiBFeHBsb3JlciBsJ2ludGVyZmFjZQ0KDQotIEwnaW50ZXJmYWNlIGVzdCBzaW1pbGFpcmUgw6AgRXhjZWwgbWFpcyBvbiBuZSBwZXV0IHZvaXIgbCdlbnNlbWJsZSBkZXMgbGlnbmVzLCBsYSAibG9naXF1ZSIgZCdPcGVuUmVmaW5lIHJlcG9zZSBzdXIgbGUgdHJhdmFpbCBlbiAqKmNvbG9ubmVzKiouDQoNCi0gT3BlblJlZmluZSBwcm9wb3NlIGRldXggdnVlcyBkZXMgZG9ubsOpZXM6IGBsaWduZXNgIGV0IGBlbnRyw6llcy5gIExlcyBkb25uw6llcyBzb250IGfDqW7DqXJhbGVtZW50IHByw6lzZW50w6llcyBlbiBtb2RlIGBsaWduZXNgLCBjJ2VzdCDDoCBkaXJlIGNoYXF1ZSBsaWduZSByZXByw6lzZW50ZSB1bmUgb2JzZXJ2YXRpb24uIExlIG1vZGUgYGVudHLDqWVzYCBwZXJtZXQgZCdhc3NvY2llciBwbHVzaWV1cnMgbGlnbmVzIMOgIHVuZSBvYnNlcnZhdGlvbi4NCg0KLSBJbCBlc3QgZG9uYyBwb3NzaWJsZSBkZSBtb2RpZmllciBsYSBzdHJ1Y3R1cmUgZHUgZmljaGllciBwb3VyIHF1ZSBwbHVzaWV1cnMgbGlnbmVzIHNvaWVudCBhc3NvY2nDqWVzIMOgIHVuIHNldWwgY2FzIGVuIHNlIGJhc2FudCBzdXIgbGEgY29sb25uZSBjbMOpICgqKnNldWxlIGxhIGxpZ25lIG9yaWdpbmFsZSBzZXJhIG51bcOpcm90w6llKiopLCBtYWlzIGRvaXQgc2UgZmFpcmUgYXZlYyBwcsOpY2F1dGlvbnMuIFBvdXIgbGVzIGxvZ2ljaWVscyBkJ2FuYWx5c2UsIGxlIGZvcm1hdCAqdGlkeSogKGBsaWduZXNgKSBlc3Qgw6AgcHJpdmlsw6lnaWVyLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1I0LmpwZykgDQoNCjwvY2VudGVyPiAgDQoNCjEuIExpZW4gc291cyBsJ2ljw7RuZSByZW52b2l0IHZlcnMgbGEgcGFnZSBkJ2FjY3VlaWwvaW1wb3J0YXRpb24uDQoyLiBSZW5vbW1lciBsZSBub20gZGUgc29uIHByb2pldCBlbiB0b3V0IHRlbXBzLg0KMy4gUGVybWFsaWVuIHF1aSBwZXJtZXQgZGUgcmV2ZW5pciDDoCB1bmUgdnVlIHByw6ljaXNlIChhZmZpY2hhZ2UsIHRyaSwgZmFjZXR0ZXMuLi4pIGR1IHByb2pldC4NCjQuIE5vbWJyZSBkZSBsaWduZXMvb2JzZXJ2YXRpb25zIGR1IGZpY2hpZXIuDQo1LiBDaGFuZ2VtZW50IGR1IG1vZGUgbGlnbmVzIG91IG9ic2VydmF0aW9ucy4NCjYuIE1vZGlmaWVyIGxlIG5vbWJyZSBkZSBsaWduZXMgYWZmaWNow6llcy4NCjcuIFBhc3NlciBkJ3VuZSBwYWdlIMOgIGwnYXV0cmUuDQo4LiBPdXZyaXIgdW4gbm91dmVsIG9uZ2xldCBPcGVuUmVmaW5lLg0KOS4gRXhwb3J0ZXIgbGUgZmljaGllciBlbiBkaWZmw6lyZW50cyBmb3JtYXRzLg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4gDQoNCiMjIDUuMS4gTCfDqWRpdGlvbiBkZSBjZWxsdWxlcw0KDQotIElsIGVzdCBwb3NzaWJsZSBkJ8OpZGl0ZXIgbWFudWVsbGVtZW50IGxlIGNvbnRlbnUgZGUgY2VsbHVsZXMgaW5kaXZpZHVlbGxlcyBlbiBzZSBwbGFjYW50IHN1ciBjaGFjdW5lIGV0IGVuIGNsaXF1YW50IGBlZGl0YCwgbWFpcyBPcGVuUmVmaW5lIHByaXZpbMOpZ2llIGxlICoqdHJhdmFpbCBlbiBsb3QgcGFyIGNvbG9ubmVzKiogcG91ciBmaWx0cmVyLCB0cmllciwgdHJhbnNmb3JtZXIuDQoNCi0gTCfDqWRpdGlvbiBkaXJlY3RlIHBldXQgcydhcHBsaXF1ZXIgaW5kaXZpZHVlbGxlbWVudCBvdSBzdXIgdG91dGVzIGxlcyBjZWxsdWxlcyBhdmVjIGxhIG3Dqm1lIHZhbGV1ciBkYW5zIGNldHRlIGNvbG9ubmUuDQoNCi0gUGVybWV0IMOpZ2FsZW1lbnQgZGUgbW9kaWZpZXIgbGUgZm9ybWF0IGRlIGxhIGNlbGx1bGUuDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjIyLmpwZyl7d2lkdGg9ODAlfQ0KDQo8L2NlbnRlcj4gIA0KDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIERhbnMgbGEgY29sb25uZSAqQ2F1c2UgcHJpbWFpcmUqIGNsaXF1ZXIgZGFucyB1bmUgY2VsbHVsZSAqQXV0cmVzKiwgw6lkaXRlciBzb24gY29udGVudSBwb3VyICphdXRyZSogZXQgYXBwbGlxdWVyIMOgIGxhIGNlbGx1bGUuIA0KLSBEYW5zIGxhIGNvbG9ubmUgKlBvcnRlKiwgbW9kaWZpZXIgbGUgZm9ybWF0IGRlIG4naW1wb3J0ZSBxdWVsbGUgY2VsbHVsZSDDoCAqTm9tYnJlKiBldCBhcHBsaXF1ZXIgw6AgdG91dGVzIGxlcyBjZWxsdWxlcyBpZGVudGlxdWVzLg0KLSBEYW5zIGxhIGNvbG9ubmUgKsOJdmFjdWF0aW9uKiwgbW9kaWZpZXIgbGUgY29udGVudSBkJ3VuZSBjZWxsdWxlICIjIiBwYXIgKk5vbiogZXQgYXBwbGlxdWVyIMOgIHRvdXRlcyBsZXMgY2VsbHVsZXMgaWRlbnRpcXVlcy4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMgNS4yLiBGb3JtYXQgZGVzIGRvbm7DqWVzDQoNCiMjIyMgVHJvaXMgZm9ybWF0cyBkZSBiYXNlOiANCiAgMS4gQ2hhw65uZSBkZSBjYXJhY3TDqHJlcw0KICAyLiBOb21icmUNCiAgMy4gRGF0ZSAobm9ybWUgSVNPLTg2MDEgWVlZWS1NTS1ERFRISDpNTTpTU1opKg0KICANCiAgPC9icj4NCiAgDQojIyMjIERldXggZm9ybWF0cyBkw6ljb3VsYW50IGQnYWN0aW9uczogDQogIC0gRXJyZXVyIChmb3JtYXQgYXR0cmlidcOpIHN1aXRlIMOgIHVuZSBlcnJldXIgZGUgdHJhbnNmb3JtYXRpb24pICANCiAgLSBOdWxsKioNCg0KPC9icj4NCg0KIyMjIyBEZXV4IGF1dHJlcyB0eXBlcyBwYXJ0aWN1bGllcnMgZMOpY291bGFudCBkZSBtYW5pcHVsYXRpb25zDQogIC0gQm9vbMOpZW4gKHZhbGV1ciBiaW5haXJlIFQgb3UgRikNCiAgLSAqQXJyYXkqIChsaXN0ZSBkZSB2YWxldXJzIHPDqXBhcsOpZXMgcGFyIHVuZSB2aXJndWxlIGVudHJlIGNyb2NoZXRzIHBvdXZhbnQgw6p0cmUgdHJhbnNmb3Jtw6llcykNCg0KPC9icj4NCg0KIyMjIyMgKiBGb3JtYXQgZGF0ZQ0KDQotIFNlbG9uIGxlcyBiZXNvaW5zLCBsZXMgZGF0ZXMgcGV1dmVudCDDqnRyZSB0cmFpdMOpZXMgc291cyBmb3JtZSBkZSBgdGV4dGVgLCBkZSBgbm9tYnJlYCBvdSBgZGF0ZWAgKGxlIGZvcm1hdCBkYXRlIGVzdCBzdXJ0b3V0IG7DqWNlc3NhaXJlIHBvdXIgbGVzIGNhbGN1bHMgZGUgZGF0ZXMpLg0KLSBMZSBmb3JtYXQgZGF0ZSByZXBvc2Ugc3VyIHVuZSBzw6lyaWUgZCdvdXRpbHMgZXQgZGUgIHN0YW5kYXJkcyBwb3VyIHJlY29ubmFpdHJlIGV0IGNvbnZlcnRpciBsZXMgdmFsZXVycyBvcmlnaW5hbGVzIGVuIGRhdGUuIA0KLSBQb3VyIHF1J3VuZSBjZWxsdWxlIHNvaXQgcmVjb25udSBjb21tZSBkYXRlLCBlbGxlIHNlcmEgdHJhbnNmb3Jtw6llIGF1IGZvcm1hdCAqSVNPLTg2MDEtY29tcGxpYW50Ki4NCi0gUG9zc2libGUgZGUgbW9kaWZpZXIgY2UgZm9ybWF0IHBvdXIgcXUnaWwgc29pdCBwbHVzIGZhY2lsZW1lbnQgbGlzaWJsZSDDoCBsJ2V4cG9ydGF0aW9uLg0KDQo8L2JyPg0KDQojIyMjIyAqKiBGb3JtYXQgIm1hbnF1YW50Ig0KDQotIE9wZW5SZWZpbmUgZmFpdCB1bmUgZGlzdGluY3Rpb24gZW50cmUgbGVzICoqY2VsbHVsZXMgdmlkZXMgYXZlYyBlc3BhY2VzIGJsYW5jcyoqIChxdWkgbmUgc29udCBwYXMgdmlkZXMhKSwgbGVzICoqdmFsZXVycyB2aWRlcyoqIChjaGFpbmUgZGUgbG9uZ3VldXIgMCksIGV0IGxlcyAqKnZhbGV1cnMgIm51bGwiKiogKHR5cGUgc3DDqWNpYWwgcXVpIG4nZXN0IHBhcyB1bmUgY2hhaW5lIGRlIGNhcmFjdMOocmVzKS4gTGVzICp2aWRlcyogZXQgbGVzICpudWxsKiBzb250IGF1c3NpIGNvbnNpZMOpcsOpcyBjb21tZSAqQmxhbmsqLg0KLSBQbHVzaWV1cnMgZm9uY3Rpb25zIGF1dG9tYXRpc8OpZXMgc291cyBgRmFjZXR0ZXNgIGV0IGDDiWRpdGVyIGxlcyBjZWxsdWxlc2AgcGVybWV0dGVudCBkZSBnw6lyZXIgY2VzIHR5cGVzIGRlIHZhbGV1cnMuDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKlRyYW5zZm9ybWVyIHVuZSBjb2xvbm5lIGRhdGUgZGUgZm9ybWF0IGNhcmFjdMOocmUgZW4gZm9ybWF0IGRhdGUqKjogIA0KLSBEYW5zIGxhIGNvbG9ubmUgKkpvdXIgY2FsZW5kYWlyZSo6IGBNZW51IC0+IMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMgLT4gRW4gZGF0ZWAgICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCi0gw4AgbCdpbXBvcnRhdGlvbiBkJ3VuIGZpY2hpZXIsIGNoYXF1ZSBjZWxsdWxlIHNlIHZlcmEgYXR0cmlidWVyIHVuIGZvcm1hdC4gDQotIFBhciBkw6lmYXV0LCBsZSBjb250ZW51IGRlcyBjZWxsdWxlcyBlc3QgZGUgZm9ybWF0IGNoYcOubmVzLiAgDQotIExlcyBjZWxsdWxlcyDDqXRhbnQgcmVjb25udSBjb21tZSBudW3DqXJpcXVlIGV0IGRhdGUgc2Vyb250IGRlIGNvdWxldXIgdmVydGUuICANCi0gTGUgZm9ybWF0IHBldXQgw6p0cmUgbW9kaWZpw6kgZGUgZGlmZsOpcmVudGVzIGZhw6dvbnM6IEJvdXRvbiBgZWRpdGAsIGBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzYCwgRmVuw6p0cmUgR1JFTC4gIA0KLSBDZSBmb3JtYXQgYXVyYSB1biBpbXBhY3Qgc3VyIGxlcyBhY3Rpb25zIHBvc3NpYmxlcy4gIA0KLSBMZSBjaGFuZ2VtZW50IGRlIGZvcm1hdCBwYXIgw6lkaXRpb24gZGlyZWN0ZSBkJ3VuZSBjZWxsdWxlIGVzdCB1bmUgb3DDqXJhdGlvbiBkaXN0aW5jdGUgZGUgbGEgdHJhbnNmb3JtYXRpb24gZHUgY29udGVudS4gTGEgcHJlbWnDqHJlIG9ww6lyYXRpb24gYXJyaXZlIHBhcmZvaXMgw6AgY2hhbmdlciBkZXMgZm9ybWF0cyBxdWUgbGEgdHJhbnNmb3JtYXRpb24gbmUgcGV1dCBmYWlyZS4NCi0gUG91ciBwbHVzIGQnaW5mb3JtYXRpb24gc3VyIGxlcyBmb3JtYXRzLCB2b2lyIGxhIFtkb2N1bWVudGF0aW9uIG9mZmljaWVsbGVdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZXhwbG9yaW5nKS4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQojIyA1LjMuIExhIGdlc3Rpb24gZGVzIGxpZ25lcyBldCBjb2xvbm5lcw0KDQoqKkxhIGdlc3Rpb24gZGVzIGNvbG9ubmVzIHBldXQgc2UgZmFpcmU6KioNCg0KLSBTdXIgY2hhcXVlIGNvbG9ubmU6IA0KICAtIEZvbmN0aW9ucyBzb3VzIGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gRMOpcGxhY2VyIC4uLiAvIFJlbm9tbWVyIC8gU3VwcHJpbWVyYCAgIA0KICAtIEZvbmN0aW9ucyBzb3VzIGBBcGVyw6d1IC0+IE1hc3F1ZXIuLi4gYCAgIA0KDQo8L2JyPg0KDQotIFN1ciBsYSBjb2xvbm5lIGBUb3V0ZXNgOiAgICAgDQogIC0gYMOJZGl0ZXIgbGVzIGNvbG9ubmVzIC0+IFJldHJpZXItc3VwcHJpbWVyLCBnZXN0aW9uIGRlcyB2YWxldXJzIGNvbnPDqWN1dGl2ZXNgICAgIA0KICAtIGBBcGVyw6d1IC0+IEFmZmljaGVyLW1hc3F1ZXJgLi4uICANCg0KPC9icj4NCg0KKipMYSBnZXN0aW9uIGRlcyBsaWduZXM6KioNCg0KLSBMYSBzw6lsZWN0aW9uIGRlIGxpZ25lcyBwZXV0IHNlIGZhaXJlIHBhciBsZSBiaWFpcyBkZSBmaWx0cmVzLCBmYWNldHRlcyBldCBhdXRyZXMgbWFuaXB1bGF0aW9ucyBwZXJzb25uYWxpdMOpZXMuICANCi0gSWwgZXN0IGF1c3NpIHBvc3NpYmxlIGRlIG1hcnF1ZXIvw6l0b2lsZXIgZGVzIGxpZ25lcyBlbiBsb3Qgb3UgaW5kaXZpZHVlbGxlbWVudCBwdWlzIGRlIGNyw6llciB1bmUgZmFjZXR0ZSBzdXIgbGEgY29sb25uZSBgVG91dGVzYC4gIA0KLSBPbiBwZXV0IGVuc3VpdGUgc3VwcHJpbWVyIGxlcyBsaWduZXMgZmlsdHLDqWVzOiBgVG91dGVzIC0+IMOJZGl0ZXIgbGVzIGxpZ25lcyAtPiBTdXBwcmltZXIgbGVzIGxpZ25lcyBjb3JyZXNwb25kYW50ZXNgLiAgDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKlN1cHByaW1lciB1bmUgY29sb25uZTogKiogIA0KLSBTdXIgbGEgY29sb25uZSAqVHlwZSBkJ2luY2lkZW50KiAtPiBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IFN1cHByaW1lciBjZXR0ZSBjb2xvbm5lYC4gIA0KDQoqKlN1cHByaW1lciBwbHVzaWV1cnMgY29sb25uZXM6ICoqICANCi0gU3VyIGxhIGNvbG9ubmUgKlRvdXRlcyogLT4gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiDDiWRpdGVyL1N1cHByaW1lciBsZXMgY29sb25uZXNgIC0+ICpLRlMqIGV0ICpDQVQqLiAgDQoNCjwvZGl2Pg0KDQoqKioNCg0KPC9icj4NCg0KIyMgNS40LiBIaXN0b3JpcXVlIChVbmRvL1JlZG8pDQoNCi0gVG91dGVzIGxlcyBhY3Rpb25zIHNvbnQgZW5yZWdpc3Ryw6llcyAobG9nIGRlIHNlcyBtYW5pcHVsYXRpb25zKSBldCBwZXV2ZW50IMOqdHJlIGFubnVsw6llcyBlbiByZWN1bGFudCDDqXRhcGUgcGFyIMOpdGFwZSBkYW5zIGwnaGlzdG9yaXF1ZS4gIA0KLSBMYSBwcmVtacOocmUgYWN0aW9uIGQndW4gaGlzdG9yaXF1ZSBlc3QgbGEgY3LDqWF0aW9uIGR1IHByb2pldC4gIA0KLSBQdWlzcXVlIGwnaGlzdG9yaXF1ZSBmYWl0IHBhcnRpZSBkdSBwcm9qZXQgZW5yZWdpc3Ryw6kgZGFucyBsZSBkb3NzaWVyIGRlIHRyYXZhaWwsIGlsIG5lIGRpc3BhcmFpdCBwYXMgw6AgbGEgZmVybWV0dXJlIGRlIGxhIHNlc3Npb24uIA0KLSBMJ2hpc3RvcmlxdWUgcGV1dCDDqnRyZSBleHRyYWl0IGVuIGZvcm1hdCBKU09OLCBjb3BpZXIvY29sbGVyIGRhbnMgbm90ZXBhZCBldCBhcHBsaXF1ZXIgZGUgbm91dmVhdS4gIA0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxOS5qcGcpe3dpZHRoPTYwJX0NCg0KPC9jZW50ZXI+ICANCg0KKipBdHRlbnRpb24hKioNCg0KLSBTaSBvbiByZWN1bGUgZGFucyBsZSB0ZW1wcyBldCBxdSdvbiBmYWl0IHVuZSBtb2RpZmljYXRpb24sIGxlcyDDqXRhcGVzIHF1aSBzdWl2ZW50IGRhbnMgbCdoaXN0b3JpcXVlIGRpc3BhcmFpc3NlbnQgcG91ciBkZSBib24uICANCg0KLSBMZXMgbWFuaXB1bGF0aW9ucyByZWxhdGl2ZXMgw6AgbCdhZmZpY2hhZ2UgbmUgc29udCBwYXMgZW5yZWdpc3Ryw6llcyBkYW5zIGwnaGlzdG9yaXF1ZSwgc2V1bGVtZW50IGxlcyB0cmFuc2Zvcm1hdGlvbnMuIEwnZW5yZWdpc3RyZW1lbnQgYXV0b21hdGlxdWUgbmUgY29tcHJlbmQgZG9uYyBwYXMgbGVzIGZhY2V0dGVzIGV0IGZpbHRyZXMgKHZ1ZSBkZSBsJ2ludGVyZmFjZSkgLSBwZXJkIGNlIHF1aSBuJ2FwcGFyYWl0IHBhcyBkYW5zIGxlIGBEw6lmYWlyZS9SZWZhaXJlYC4NCg0KLSBMJ8OpZGl0aW9uIGRpcmVjdGUgZGFucyBsZXMgY2VsbHVsZXMgYXBwYXJhaXQgZGFucyBsJ2hpc3RvcmlxdWUgbWFpcyBuZSBwZXV0IMOqdHJlIGV4cG9ydMOpZS4gIA0KDQotIEZhY2V0dGVzIGV0IGZpbHRyZXMgcydlbnJlZ2lzdHJlbnQgZ3JhY2UgYXUgYHBlcm1hbGllbmAuICANCg0KPC9icj4NCg0KKioqDQoNCjwvYnI+DQoNCiMgNi4gTWVudSBldCBmb25jdGlvbnMgZGUgYmFzZQ0KDQpPcGVuIFJlZmluZSBwZXJtZXQgZGUgdHJhdmFpbGxlciBkZSAqKmRldXggZmHDp29ucyoqOiAgDQoNCg0KMS4gQXZlYyBsJ2Vuc2VtYmxlIGRlcyAqKmZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzKiogcXVlIGwnb24gcmV0cm91dmUgZGFucyBsZXMgbWVudXMuDQoNCg0KMi4gQXZlYyBsZSAqKmxhbmdhZ2UgR1JFTCoqIHBlcm1ldHRhbnQgZGUgcsOpZGlnZXIgc2VzIHByb3ByZXMgW2V4cHJlc3Npb25zLl0oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9leHByZXNzaW9ucykuICANCg0KLSBNw6ptZSBsb3JzcXVlIGwnb24gdXRpbGlzZSBsZXMgZm9uY3Rpb25zIGF1dG9tYXRpc8OpZXMsIGlsIGVzdCBwb3NzaWJsZSBkJ2VuIG1vZGlmaWVyIGxlIGZvbmN0aW9ubmVtZW50IGVuIMOpZGl0YW50IGRpcmVjdGVtZW50IGxhIHN5bnRheGUgR1JFTCBjb3JyZXNwb25kYW50ZS4gDQoNCjwvYnI+DQoNCiMjIDYuMS4gRm9uY3Rpb25zIGF1dG9tYXRpc8OpZXM6DQoNCi0gTGUgbWVudSBldCBsJ2Vuc2VtYmxlIGRlIHNlcyBmb25jdGlvbnMgYXV0b21hdGlzw6llcyBhcHBhcmFpdCBlbiBjbGlxdWFudCBzdXIgbGEgZmzDqGNoZSBkZSBsJ2ludGl0dWzDqSBkZSBjaGFxdWUgY29sb25uZS4NCg0KLSBMZXMgZm9uY3Rpb25zIGRpc3BvbmlibGVzIHNvdXMgbGUgbWVudSBkZSBsYSBwcmVtacOocmUgY29sb25uZSBgVG91dGVzYCBzZSBkaXN0aW5ndWVudCBkZXMgYXV0cmVzIHB1aXNxdSdlbGxlcyBwZXJtZXR0ZW50IGQnYXBwbGlxdWVyIGRlcyBmb25jdGlvbnMgw6AgbCdlbnNlbWJsZSBkZXMgY29sb25uZXMgZHUgZmljaGllcjogTWFycXVlciwgw6l0b2lsZXIsIHN1cHByaW1lciwgbWFzcXVlci4uLg0KDQo8L2JyPg0KDQojIyMjIE1lbnUgZXQgZm9uY3Rpb25zIGRlIGxhIGNvbG9ubmUgYFRvdXRlc2ANCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUjIxLmpwZyl7d2lkdGg9OTAlfQ0KDQo8L2JyPg0KDQojIyMjIE1lbnUgZXQgZm9uY3Rpb25zIGRlIGNoYXF1ZSBjb2xvbm5lLXZhcmlhYmxlDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IxMi5qcGcpe3dpZHRoPTkwJX0NCg0KPC9icj4NCg0KKioqDQoNCiMjIDYuMi4gTGUgbGFuZ2FnZSBHUkVMDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IxNC5qcGcpDQoNCjwvYnI+DQoNCkdSRUwgLSBFeHByZXNzaW9ucyBzaW1pbGFpcmVzIGF1eCBmb3JtdWxlcyBleGNlbCBtYWlzIHF1aSBzJ2FwcGxpcXVlbnQgYXV4IGNvbG9ubmVzLCBub24gYXV4IGNlbGx1bGVzLCBldCBxdWkgbmUgc29udCBwYXMgc3RvcXXDqWVzIMOgIG3Dqm1lIGxlcyBkb25uw6llcyBtYWlzIGRhbnMgdW4gc2NyaXB0LiAgDQoNCjwvYnI+DQoNCiMjIyBMZSBsYW5nYWdlIEdSRUwgcGV1dCBzJ3V0aWxpc2VyIGRlIGRpZmbDqXJlbnRlcyBmYcOnb25zOiAgDQoNCi0gRW4gY3LDqWFudCBkZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIDogYEZhY2V0dGUgLT4gRmFjZXR0ZSB0ZXh0dWVsbGUgcGVyc29ubmFsaXPDqWAuICANCg0KLSBFbiB0cmFuc2Zvcm1hbnQgdW5lIGNvbG9ubmU6IGDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiB0cmFuc2Zvcm1lcmAgKGF1c3NpIHNvdXMgYFRvdXRlcyAtPiBUcmFuc2Zvcm1lcmApLiAgDQoNCi0gRW4gY3LDqWFudCB1bmUgbm91dmVsbGUgY29sb25uZTogYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGJhc8OpZSBzdXIgY2V0dGUgY29sb25uZWAuICANCg0KPC9icj4NCg0KKipMZXMgZmlsdHJlcyBldCBsZXMgdHJhbnNmb3JtYXRpb25zIHBsdXMgY29tcGxleGVzIHBldXZlbnQgYXVzc2kgbsOpY2Vzc2l0ZXIgbCd1c2FnZSBkJ1tleHByZXNzaW9ucyByw6lndWxpw6hyZXMgKHJlZ2V4KV0oaHR0cHM6Ly9yZWdleDEwMS5jb20vKSoqDQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIyA2LjMuIFRyaWVyIHVuIGZpY2hpZXINCg0KLSBMZXMgZG9ubsOpZXMgYXBwYXJhaXNzZW50IGRhbnMgbCdvcmRyZSBkdSBmaWNoaWVyIG9yaWdpbmFsLg0KLSBQb3VyIG1vZGlmaWVyIGwnb3JkcmUgZCdhcHBhcml0aW9uIGRlcyBvYnNlcnZhdGlvbnMsIGFwcGxpcXVlciB1biBvdSBkZXMgdHJpcyBzdXIgbGVzIGNvbG9ubmVzIGF2ZWMgYFRyaWVyLi4uYA0KLSBQb3VyIGNvbWJpbmVyIHBsdXNpZXVycyB0cmlzIHN1ciBkaWZmw6lyZW50ZXMgY29sb25uZXM6IEZhaXJlIHVuIHRyaWUgc3VyIHVuZSBjb2xvbm5lIHB1aXMgc3VyIHVuZSBhdXRyZSBlbiBtb2RpZmlhbnQgc2kgbsOpY2Vzc2FpcmUgbCdvcHRpb24gYFRyaWVyIHNlbG9uIGNldHRlIHNldWxlIGNvbG9ubmVgLg0KLSBMZXMgdHJpcyBuZSBzb250IHF1ZSB0ZW1wb3JhaXJlcyBldCBuJ2FmZmVjdGVudCBkb25jIHF1ZSBsJ2FmZmljaGFnZS4gUG91ciBxdSdpbHMgc29pZW50IHBlcm1hbmVudHMgKHJlbnVtw6lyb3RhdGlvbiBkZXMgbGlnbmVzKTogYFRyaWVyIC0+IFJldHJpZXIgbGVzIGxpZ25lcyBkZSBmYcOnb24gcGVybWFuZW50ZWAqLiAgDQotIElsIGVzdCBwb3NzaWJsZSBkZSBzdXBwcmltZXIgZXQgZCdpbnZlcnNlciBsZSB0cmkgw6AgcGFydGlyIGRlcyBvcHRpb25zIHN1ciBjaGFxdWUgY29sb25uZSBvdSBncsOiY2Ugw6AgbGEgZm9uY3Rpb24gYFRyaWVyYCBkdSBoYXV0LiAgDQoNCiAqTGUgdHJpIHBlcm1hbmVudCBhZmZlY3RlIHRvdXQgbGUgZmljaGllciwgcGFzIHNldWxlbWVudCBsYSB2dWUgZmlsdHLDqWUuICANCg0KIVtdKGltYWdlcy9PUjYuanBnKSANCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gVHJpZXIgbGVzIHZhbGV1cnMgZGUgbGEgY29sb25uZSBgSm91ciBjYWxlbmRhaXJlYCBlbiBgZGF0ZSBhbnTDqWNocm9ub2xvZ2lxdWVgLiAgDQotIFF1ZWxsZSBlc3QgbGEgZGVybmnDqHJlIGRhdGUgZCdpbmNpZGVudCBlbnJlZ2lzcsOpZSBkYW5zIGxlIGZpY2hpZXIgPyAgDQotIFN1cHByaW1lciBsZSB0cmkuICANCjwvZGl2Pg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gVHJpZXIgbGVzIHZhbGV1cnMgZGUgbGEgY29sb25uZSBgTW9pcyBDYWxlbmRyaWVyYCAgDQotIFRyaWVyIGxlcyB2YWxldXJzIGRlIGxhIGNvbG9ubmUgYEpvdXIgZHUgbW9pc2AgIA0KLSBFeHBsb3JlciBsZSByw6lzdWx0YXQuLi4gDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCjwvYnI+DQoNCiMjIDYuNC4gRmlsdHJlciBsZSB0ZXh0ZQ0KDQotIExhIGZvbmN0aW9uIGBGaWx0cmVyIGxlIHRleHRlYCBwZXJtZXQgZGUgY2hlcmNoZXIgdW5lIG91IGRlcyBjaGHDrm5lcyBkZSBjYXJhY3TDqHJlcyBkYW5zIHVuZSBvdSBwbHVzaWV1cnMgdmFyaWFibGVzLiAgDQotIFBlcm1ldCBkZSByZWNoZXJjaGVyIGRlcyBjaGFpbmVzIGRlIGNhcmFjdMOocmVzIGRhbnMgdW5lIGNvbG9ubmUgZXQgZGUgY29tYmluZXIgZGVzIGZpbHRyZXMgYXBwbGlxdcOpcyBzdXIgcGx1c2lldXJzIGNvbG9ubmVzIHBvdXIgcmFmZmluZXIgbGEgcmVjaGVyY2hlLiAgDQotIEZvbmN0aW9uIHBsdXMgZXhww6lkaXRpdmUgcXVlIGxlcyBmYWNldHRlcyBxdWFuZCBvbiBuZSB2ZXV0IHF1ZSBjaGVyY2hlciB1bmUgY2hhaW5lIGRlIGNhcmFjdMOocmVzLiAgDQotIEwnYWZmaWNoYWdlIGRlcyBsaWduZXMgc2UgbGltaXRlcmEgYXUgbm9tYnJlIGRlIGNhcyBjb3JyZXNwb25kYW50cyBhdXggY3JpdMOocmVzIGRlIHJlY2hlcmNoZSBpbnNjcml0cyBkYW5zIGxlcyBib2l0ZXMgZGUgZmlsdHJlcy4gIA0KLSAqKlRhbnQgcXVlIGxlcyBmaWx0cmVzIHNlcm9udCBhY3RpZnMsIGxlcyBhY3Rpb25zIHN1YnPDqXF1ZW50ZXMgc2UgbGltaXRlcm9udCDDoCBjZXMgY2FzIGZpbHRyw6lzLioqICANCg0KIVtdKGltYWdlcy9PUjcuanBnKSANCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gRmlsdHJlciBsZSB0ZXh0ZSBzdXIgbGEgY29sb25uZSAqQ29kZSBkZSBsaWV1KjogImJlcnJpIiAgDQotIEZpbHRyZXIgbGUgdGV4dGUgc3VyIGxhIGNvbG9ubmUgKkhldXJlIGRlIGwnw6l2ZW5lbWVudCo6ICIxMiIgIA0KLSBFeHBsb3JlciBsZXMgcsOpc3VsdGF0cyAgDQotIENvbW1lbnQgcydhc3N1cmVyIGQnYXZvaXIgc2V1bGVtZW50IGxlcyBjYXMgc3VydmVudXMgZW50cmUgMTJoIGV0IDEzaD8gQ29tYmllbiBkZSBsaWduZXMgY29ycmVzcG9uZGVudCDDoCBjZXMgY29uZGl0aW9ucz8gDQotIFRvdXQgc3VwcHJpbWVyIGxlcyBmaWx0cmVzLg0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIDcuIExlcyBmYWNldHRlcw0KDQo8ZGl2IGNsYXNzID0gInJpZ2h0Ij4NCjxpbWcgc3JjPSJpbWFnZXMvT1IzNC5qcGciICB3aWR0aD0iNjAlIiAvPg0KPC9kaXY+DQoNCi0gTGVzIGZhY2V0dGVzIGNvbnN0aXR1ZW50IGxhIG1hcnF1ZSBkZSBjb21tZXJjZSBkJ09wZW5SZWZpbmUsIGQnb8O5IGxlIGxvZ28hIA0KDQotIEZvbmN0aW9ubmFsaXTDqSBwdWlzc2FudGUgcXVpIHBlcm1ldCBkJ2V4cGxvcmVyIGV0IGRlIGZpbHRyZXIgc2VzIGRvbm7DqWVzIGVuIGZvbmN0aW9uIGRlIGRpZmbDqXJlbnRlcyBjb25kaXRpb25zLiAgDQoNCi0gTidhZmZlY3RlbnQgcGFzIGRpcmVjdGVtZW50IGxlcyBkb25uw6llcywgc2V1bGVtZW50IGxhIHByw6lzZW50YXRpb24uICANCg0KLSDDgCBsYSBiYXNlLCB1bmUgZmFjZXR0ZSBjb3JyZXNwb25kIMOgIGxhIGxpc3RlIGRlcyB2YWxldXJzIHBvc3NpYmxlcyBkJ3VuZSB2YXJpYWJsZSAgKGV0IGRlIGxldXIgb2NjdXJlbmNlKSBwcsOpc2VudMOpZSBzZWxvbiBsZSBmb3JtYXQgKGNoYWluZSwgbnVtw6lyaXF1ZSwgZGF0ZSkuICANCg0KLSBQZXJtZXR0ZW50IHVuZSBleHBsb3JhdGlvbiBldCBtYW5pcHVsYXRpb24gZGVzIHZhbGV1cnMgcG9zc2libGVzIGV0IGRlIGxldXJzIGNhcyBjb3JyZXNwb25kYW50cyBwbHVzIMOpbGFib3LDqWVzIHF1ZSBsZXMgZmlsdHJlcy4gIA0KDQotIE9uIHBldXQgYWluc2kgaWRlbnRpZmllciBsZXMgdGVuZGFuY2VzLCBsZXMgcsOpZ3VsYXJpdMOpcywgbGVzIGVycmV1cnMsIGxlcyDDqWNhcnRzLCBsZXMgcsOpcMOpdGl0aW9ucyBldCAgY2libGVyIGxlcyB2YWxldXJzIGRlIHNvdXMtZ3JvdXBlcyBwcsOpY2lzLiAgDQoNCi0gQ2VzIHNvdXMtZ3JvdXBlcyBwZXV2ZW50IGVuc3VpdGUgw6p0cmUgw6lkaXTDqXMgZXQgZXhwb3J0w6lzIChib3V0b24gYEV4cG9ydGVyYCBlbiBoYXV0IMOgIGRyb2l0ZSkuIA0KDQo8L2JyPg0KDQojIyMgRGV1eCB0eXBlcyBkZSBmYWNldHRlczoNCg0KICAtIFsxXSBMZXMgZmFjZXR0ZXMgYXV0b21hdGlzw6llcy4gDQogIDwvYnI+DQogIC0gWzJdIExlcyBmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMuDQogIDwvYnI+DQogIC0gWzNdIElsIGVzdCBhdXNzaSBwb3NzaWJsZSBkZSBjcsOpZXIgc2VzIHByb3ByZXMgZmFjZXR0ZXMgZ3LDomNlIGF1IGxhbmdhZ2UgR1JFTCBwb3VyIGTDqWZpbmlyIGRlcyBjb25kaXRpb25zIGRlIHPDqWxlY3Rpb24vZmlsdHJlIHRyw6hzIHByw6ljaXNlcyAob24gcGFybGUgZW5jb3JlIGljaSBkZSBgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzYCwgbWFpcyBlbGxlcyBkb2l2ZW50IMOqdHJlIHLDqWRpZ8OpZXMgbWFudWVsbGVtZW50KS4NCg0KPC9icj4NCg0KIyMjIFRyb2lzIGZvcm1hdHMgZGUgZmFjZXR0ZXM6DQoNCk9uIHJldHJvdXZlIMOpZ2FsZW1lbnQgZGlmZsOpcmVudHMgKipmb3JtYXRzIGRlIGZhY2V0dGVzKiogLT4gdW5lIHBvdXIgY2hhcXVlIGZvcm1hdCBkZSBkb25uw6llcyAgDQoNCjEuIGBGYWNldHRlIHRleHR1ZWxsZWAgWzQtNV0gIA0KDQoyLiBgRmFjZXR0ZSBudW3DqXJpcXVlYCAgWzddICANCg0KMy4gYEZhY2V0dGUgY2hyb25vbG9naXF1ZWAgWzZdICANCg0KLSBMZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIHByb3Bvc2VudCBhdXNzaSBkZXMgZmFjZXR0ZXMgYm9vbMOpZW5uZXMuICANCg0KPC9icj4NCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMjMuanBnKQ0KPC9jZW50ZXI+ICANCg0KLSAqKls4XSoqIExlIGxpZW4gYGNoYW5nZXJgIHBlcm1ldCBkJ291dnJpciB1bmUgZmVuw6p0cmUgZCfDqWRpdGlvbiBHUkVMIHBvdXIgbW9kaWZpZXIgbGEgc3ludGF4ZSBkZSBsYSBmYWNldHRlLiAgDQotICoqWzldKiogUG91ciBzdXBwcmltZXIgbGVzIGZhY2V0dGVzLCBjbGlxdWVyIHN1ciBsZSB4IGRlIGNoYXF1ZSBmZW7DqnRyZSBvdSBgVG91dCBzdXBwcmltZXJgLiAgDQotIFBvdXIgY29uc2VydmVyIGxlcyBmZW7DqnRyZXMgbWFpcyBzdXBwcmltZXIgbGVzIHPDqWxlY3Rpb25zIHF1aSB5IG9udCDDqXTDqSBmYWl0ZXMsIGNsaXF1ZXIgc3VyIGByw6lpbnRpYWxpc2VyYCBzdXIgY2hhcXVlIGZlbsOqdHJlIG91IGBUb3V0IHLDqWluaXRpYWxpc2VyYCAqKls5XSoqLiAgDQotICoqWzEwXSoqIE9wdGlvbiBgR3JvdXBlYDogT3V0aWxzIHByb3Bvc2FudCBkaWZmw6lyZW50cyBhbGdvcml0aG1lcyBkZSBzaW1pbGFyaXTDqSBwZXJtZXR0YW50IGRlIHJlZ3JvdXBlciBkZXMgY2F0w6lnb3JpZXMgc2VtYmxhYmxlcy4gIA0KDQo8L2JyPg0KDQojIyMjIDEuIEZhY2V0dGUgdGV4dHVlbGxlIFs0LTVdIA0KDQotIFR5cGUgZGUgZmFjZXR0ZSBsZSBwbHVzIHNvdXZlbnQgdXRpbGlzw6kuICANCg0KLSBSZWdyb3VwZW50IGRhbnMgbGEgZmVuw6p0cmUgZGUgZ2F1Y2hlIGxlcyB2YWxldXJzIGRpc3RpbmN0ZXMgKHRleHR1ZWxsZXMgb3UgbnVtw6lyaXF1ZXMpIGRlcyBjb2xvbm5lcyB2b3VsdWVzLiAgDQogIC0gT24gcGV1dCBmYWlyZSB1bmUgZmFjZXR0ZSB0ZXh0dWVsbGUgc3VyIHVuZSBjb2xvbm5lIG51bcOpcmlxdWUgbWFpcyBwYXMgbCdpbnZlcnNlLiAgDQogIC0gMjAwMCB2YWxldXJzIG1heGltdW0gcGFyIGTDqWZhdXQgbWFpcyBwZXV0IMOqdHJlIG1vZGlmacOpIGRhbnMgbGVzIHByw6lmw6lyZW5jZXMuIFNpIGxlcyB2YWxldXJzIHNvbnQgdHJvcCBub21icmV1c2VzLCBlbGxlcyBuZSBzZXJvbnQgcGFzIGxpc3TDqWVzICh1biBmaWx0cmUgcG91cnJhaXQgw6p0cmUgdXRpbGlzw6kpLiANCiAgDQotIFBlcm1ldHRlbnQgZGUgY29tYmluZXIgZGlmZsOpcmVudHMgZmlsdHJlcyBlbiBzw6lsZWN0aW9ubmFudCBkaWZmw6lyZW50ZXMgdmFsZXVycyBkJ3VuZSBvdSBwbHVzaWV1cnMgdmFyaWFibGVzIChldCBsZXVycyBjYXMgY29ycmVzcG9uZGFudHMpLiAgDQogIC0gQ2xpcXVlciBgaW5jbHVyZWAgb3UgYGV4bHVyZWAgcG91ciBzw6lsZWN0aW9ubmVyIG91IHN1cHByaW1lciBkZXMgY2hvaXggbXVsdGlwbGVzICoqWzEyXSoqLiAgDQogIC0gVW5lIGZvaXMgbGEgc8OpbGVjdGlvbiBmYWl0ZSwgbCdvcHRpb24gYGludmVyc2VyYCBwZXJtZXQgZGUgc8OpbGVjdGlvbm5lciB0b3V0IFNBVUYgbGEgc8OpbGVjdGlvbiAqKlsxMV0qKi4gIA0KICAtIFBldXZlbnQgw6p0cmUgdHJpw6llcyBzZWxvbiBsZSBub20gb3UgbGUgY29tcHRlIChub21icmUgZCdvY2N1cmVuY2UpLiAgDQotIFBlcm1ldHRlbnQgKipk4oCZw6lkaXRlciBsZXMgdmFsZXVycyoqIChjb250ZW51IGRlIGNoYXF1ZSBjZWxsdWxlIGNvcnJlc3BvbmRhbnRlKSAqKlsxM10qKi4gIA0KDQo8L2JyPg0KDQojIyMjIDIuIEZhY2V0dGUgbnVtw6lyaXF1ZSBbN10NCg0KLSBWaXN1YWxpc2VyIGV0IHPDqWxlY3Rpb25uZXIgbGVzIHZhbGV1cnMgZOKAmXVuZSB2YXJpYWJsZSBudW3DqXJpcXVlIGFsbGFudCBkZSBsYSBwbHVzIHBldGl0ZSDDoCBsYSBwbHVzIGdyYW5kZS4gIA0KDQo8L2JyPg0KDQojIyMjIDMuIEZhY2V0dGUgY2hyb25vbG9naXF1ZSBbNl0NCg0KLSBWaXN1YWxpc2VyIGV0IHPDqWxlY3Rpb25uZXIgbGVzIHZhbGV1cnMgZOKAmXVuZSBjb2xvbm5lIGRhdGUgZW4gbGlnbmUgZHUgdGVtcHMuICANCg0KDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCioqRmlsdHJlcioqIA0KDQotIEV4cGxvcmVyIGxlcyB2YWxldXJzIGRlIGxhIHZhcmlhYmxlICpDYXVzZSBwcmltYWlyZSouIFF1ZWxsZSBlc3QgbGEgZGV1eGnDqG1lIHBsdXMgZnLDqXF1ZW50ZT8gDQotIFF1ZWxsZXMgc29udCBsZXMgY2F0w6lnb3JpZXMgZGUgKkNhdXNlIHNlY29uZGFpcmUqIHJlbGnDqWVzIMOgIGxhICpDYXVzZSBwcmltYWlyZSAiQ2xpZW50w6hsZSIqPyAgIA0KLSBRdWVsbGUgZXN0IGxhIHBsdXMgZnLDqXF1ZW50ZT8gU8OpbGVjdGlvbm5lciBjZXR0ZSB2YWxldXIuIENvbWJpZW4gZGUgY2FzIGNvcnJlc3BvbmRlbnQgw6AgY2V0dGUgc8OpbGVjdGlvbj8gIA0KLSDDgCBxdWVsICpqb3VyIGRlIGxhIHNlbWFpbmUqIGNldHRlIGNhdXNlIGVzdC1lbGxlIHN1cnZlbnVlIGxlIHBsdXMgc291dmVudD8gIA0KLSBSw6lpbml0aWFsaXNlciB0b3V0ZXMgbGVzIGZhY2V0dGVzLg0KDQoqKsOJZGl0ZXIqKiAgDQoNCi0gRGFucyBsYSBmYWNldHRlICpDYXVzZSBwcmltYWlyZSosIHJlbm9tbWVyIGxhIHZhbGV1ciAjTkQgLT4gTkEuICANCi0gQ29ycmlnZXIgbGEgdmFsZXVyICJhdXRyZSIgcG91ciBxdSdlbGxlIHNvaXQgZnVzaW9ubsOpZSDDoCBsYSB2YWxldXIgIkF1dHJlcyIuICANCi0gU3VwcHJpbWVyIHRvdXRlcyBsZXMgZmFjZXR0ZXMuDQo8L2Rpdj4NCg0KPC9icj4NCg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipGaWx0cmVyKiogDQoNCi0gUXVlbCBlc3QgbGUgKnN5bXB0b21lKiBsZSBwbHVzIGZyw6lxdWVudD8gU8OpbGVjdGlvbm5lciBjZXR0ZSB2YWxldXIuICANCi0gU3VyIHF1ZWxsZSAqTGlnbmUqIGNlICpzeW1wdG9tZSogcydlc3QgcHJvZHVpdCBsZSBwbHVzIHNvdXZlbnQ/IFPDqWxlY3Rpb25uZXIgY2V0dGUgdmFsZXVyLiAgDQotIENlcyDDqXZlbmVtZW50cyBvbnQtaWxzIG7DqWNlc3NpdMOpIHVuZSAqw6l2YWN1YXRpb24qPyAgDQoNCioqw4lkaXRlcioqICANCi0gw4lkaXRlciBsYSB2YXJpYWJsZSAqw6l2YWN1YXRpb24qIGRlIGZhw6dvbiDDoCBjZSBxdSdpbCBuJ3kgYWl0IHF1ZSAqKmRldXggdmFsZXVycyoqIHBvc3NpYmxlczogT3VpIGV0IE5vbi4gIA0KPC9kaXY+DQoNCioqKg0KDQo8L2JyPg0KDQojIDguIExlcyByZWdyb3VwZW1lbnRzIChjbHVzdGVyaW5nKQ0KDQotIEZvbmN0aW9uIHF1aSBwZXJtZXQgZCdpZGVudGlmaWVyIGRhbnMgdW5lIGNvbG9ubmUgbGVzIHZhbGV1cnMgZGlzdGluY3RlcyBxdWkgcG91cnJhaWVudCBhdm9pciBsYSBtw6ptZSBzaWduaWZpY2F0aW9uIG91IHF1aSBwb3VycmFpZW50IMOqdHJlIHJlZ3JvdXDDqWVzIGRhbnMgdW5lIG3Dqm1lIGNhdMOpZ29yaWUgPSAidmFyaWF0aW9ucyBzdXIgbGUgbcOqbWUgdGjDqG1lIiDDqXZhbHXDqWVzIGVuIGZvbmN0aW9uIGRlIFtkaWZmw6lyZW50cyBhbGdvcml0aG1lc10oaHR0cHM6Ly9naXRodWIuY29tL09wZW5SZWZpbmUvT3BlblJlZmluZS93aWtpL0NsdXN0ZXJpbmctSW4tRGVwdGgpLiANCg0KLSBjaGFxdWUgc3VnZ2VzdGlvbiBkb2l0IMOqdHJlIGFwcHJvdXbDqWUgaW5kaXZpZHVlbGxlbWVudCBwb3VyIHF1ZSBsZXMgbW9kaWZpY2F0aW9ucyBzJ2FwcGxpcXVlbnQgKGxlcyByZWdyb3VwZW1lbnRzIHByb3Bvc8OpcyBuZSBzb250IHBhcyBuw6ljZXNzYWlyZW1lbnQgcGVydGluZW50cykuDQoNCi0gT3BlblJlZmluZSBwcm9wb3NlIGRlcyAqY2x1c3RlcnMqIHNlbG9uIGRpZmbDqXJlbnRlcyBtw6l0aG9kZXMgcGx1cyBvdSBtb2lucyDDqWxhYm9yw6llcyAoKlByb2NoZSB2b2lzaW4qIHByZW5kIHBsdXMgZGUgbcOpbW9pcmUpIHF1aSBwZXJtZXR0ZW50IGRlIHJlZ3JvdXBlciBsZXMgdmFsZXVycyBzaW1pbGFpcmVzIGV0IHByb3Bvc2VudCBkZXMgbWF0Y2hzIHBvc3NpYmxlcyAoKmZ1enp5IG1hdGNoaW5nKik6IHBhciBleGVtcGxlICplbXByZWludGUqIGVzdCBwbHVzIGNvbnNlcnZhdGV1ciAoZGlzdGluZ3VlIGNhc3NlLCBlc3BhY2VzLCBvcmRyZSwgcsOpcMOpdGlvbiwgcG9uY3R1YXRpb24uLi4pLCAqbmdyYW0qIGVzdCBwbHVzIGZsZXhpYmxlIChtw6ptZSBjYXJhY3TDqHJlcyksICpNZXRhcGhvbmUzKiBlc3QgbGUgcGx1cyAibGliw6lyYWwiIChtw6ptZSBwcm9ub25jaWF0aW9uKS4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gQ3LDqWVyIHVuZSBmYWNldHRlIHRleHR1ZWxsZSBzdXIgbGEgY29sb25uZSAqQ29kZSBkZSBsaWV1Ki4gIA0KLSBDbGlxdWVyIHN1ciBgR3JvdXBlYCBldCBleHBsb3JlciBsZXMgcmVncm91cGVtZW50cyBlbiBmb25jdGlvbiBkZXMgZGlmZsOpcmVudHMgYWxnb3JpdGhtZXMuICANCjwvZGl2Pg0KDQoqKioNCg0KPC9icj4NCg0KIyA5LiBHUkVMIGV0IGxlcyBmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgDQoNCg0KLSBGb25jdGlvbm5lbnQgY29tbWUgZGVzIGZhY2V0dGVzIGF1dG9tYXRpc8OpZXMgc2F1ZiBxdSdvbiBuZSBwZXV0IMOpZGl0ZXIgZW4gZm9uY3Rpb24gZGUgY2VzIHLDqXN1bHRhdHMgY2FyIGVsbGVzIHByw6lzZW50ZW50IGRlcyBkb25uw6llcyBtb2RpZmnDqWVzIGVuIG3DqW1vaXJlLg0KDQotIE9udCDDqXTDqSBkw6l2ZWxvcHDDqWVzIGV0IGF1dG9tYXRpc8OpZXMgYWZpbiBkJ2V4cGxvcmVyIGRlcyBhc3BlY3RzIHByw6ljaXMgZGVzIGRvbm7DqWVzIHNhbnMgYXZvaXIgw6AgbGVzICByw6lkaWdlciBlbiBzeW50YXhlIEdSRUw6IA0KDQogIC0gYEZhY2V0dGUgcGFyIG1vdGAgOiBEaXZpc2UgY2hhcXVlIG1vdCAoc8OpcGFyw6kgZCd1biBlc3BhY2UpIGQndW5lIGNvbG9ubmUgZXQgbGVzIHByw6lzZW50ZSBlbiBsaXN0ZSBkZSB2YWxldXJzIGRpc3RpbmN0ZXMgW3ZhbHVlLnNwbGl0KCIgIildLg0KICANCiAgLSBgRmFjZXR0ZSBkb3VibG9uc2A6IHZhbGV1cnMgYm9vbMOpZW5uZXMgaW5kaXF1YW50IHNpIGxlcyB2YWxldXJzIHNvbnQgdW5pcXVlcyAoZmFsc2UpIG91IG5vbiAodHJ1ZSkgW2ZhY2V0Q291bnQodmFsdWUsICd2YWx1ZScsICdTeW1wdG9tZScpID4gMV0uICANCiAgDQogIC0gYEZhY2V0dGVzIGxvZ2FyaXRobWlxdWVzYDogbW9kaWZpY2F0aW9uIGxvZ2FyaXRobWlxdWUgZGUgdmFsZXVycyBudW3DqXJpcXVlcyBbdmFsdWUubG9nKCldLg0KICANCiAgLSBgRmFjZXR0ZSBsb25ndWV1ciBkZSB0ZXh0ZWA6IGxpc3RlIGxlIG5vbWJyZSBkZSBjYXJhY3TDqHJlcyBkdSBjb250ZW51IGRlcyBjZWxsdWxlcyBkJ3VuZSBjb2xvbm5lIFt2YWx1ZS5sZW5ndGgoKV0uDQogIA0KICAtIEZhY2V0dGVzIHBlcm1ldHRhbnQgZCdleHBsb3JlciBsZXMgdmFsZXVycyBkJ2BlcnJldXJgLCBgbnVsbGVzYCwgYHZpZGVzYC4uLiBbaXNFbXB0eVN0cmluZyh2YWx1ZSldDQoNCioqKiANCg0KPC9icj4NCg0KIyMjIEdSRUwgLSBwcmluY2lwZXMgZGUgYmFzZSAgDQoNCi0gKkdvb2dsZSBSZWZpbmUgRXhwcmVzc2lvbiBMYW5ndWFnZSogDQotIExhbmdhZ2Ugc2ltaWxhaXJlIMOgIGphdmFzY3JpcHQgZXQgZm9ybXVsZXMgZXhjZWwuICAgIA0KLSBQZXJtZXQgbGEgcsOpZGFjdGlvbiBkJ2V4cHJlc3Npb25zIHZpc2FudCDDoCBtYW5pcHVsZXIvdHJhbnNmb3JtZXIgbGUgY29udGVudSBkZXMgY2VsbHVsZXMgZCd1bmUgY29sb25uZS4gIA0KKFZvaXIgbGEgW2RvY3VtZW50YXRpb24gb2ZmaWNpZWxsZV0oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ncmVsKSBwb3VyIHBsdXMgZGUgZMOpdGFpbHMpICANCi0gTGFuZ2FnZSBjb21wb3PDqSBkZSBbZm9uY3Rpb25zXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2dyZWxmdW5jdGlvbnMpIGV0IGQnW29iamV0c10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9leHByZXNzaW9ucyN2YXJpYWJsZXMpLg0KDQo8L2JyPg0KDQojIyMjIFV0aWxpc2UgdW5lIHN5bnRheGUgcGFydGljdWxpw6hyZSBwb3VyIGNpYmxlciBsZXMgb2JqZXRzICh2YXJpYWJsZXMpOiAgDQotIENvbnRlbnUgZGUgY29sb25uZSBhY3R1ZWxsZTogYHZhbHVlYC4gICAgIA0KLSBDb250ZW51IGQndW5lIGF1dHJlIGNvbG9ubmU6IGBjZWxsc1snbm9tLWNvbG9ubmUnXS52YWx1ZWAuICAgIA0KLSBDb250ZW51IHRleHR1ZWw6ICJndWlsbGVtZXQgc2ltcGxlIG91IGRvdWJsZSIuICAgIA0KDQo8L2JyPg0KDQojIyMjIERldXggZm9ybWF0cyBkZSBub3RhdGlvbjogIA0KLSBpbWJyaXF1w6llOiAodHJpbSh0b0xvd2VyY2FzZSh2YWx1ZSkpLiAgICANCi0gKipzw6lxdWVudGllbGxlKio6IHZhbHVlLnRvTG93ZXJjYXNlKCkudHJpbSgpIChwbHVzIGZhY2lsZSDDoCBsaXJlKS4gICAgDQoNCjwvYnI+DQoNCiMjIyMgRGlmZsOpcmVudHMgdHlwZXMgZGUgZm9uY3Rpb25zOiAgDQotIExlcyBmb25jdGlvbnMgZXQgbGV1ciBjb21wb3J0ZW1lbnQgZMOpcGVuZHJvbnQgZHUgdHlwZSBkZSBkb25uw6llcyBtYW5pcHVsw6llcy4gIA0KLSBbQ2VydGFpbmVzIGZvbmN0aW9uc10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ncmVsZnVuY3Rpb25zI3NsaWNlYS1uLWZyb20tbi10by1vcHRpb25hbCkgcGVybWV0dGVudCBkZSB0cmFuc2Zvcm1lciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIGVuIGBhcnJheXNgIChsaXN0ZSBkJ8OpbMOpbWVudHMpIGV0IGRlIGxlcyBtYW5pcHVsZXIuICANCi0gW0NlcnRhaW5lcyBmb25jdGlvbnNdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZXhwcmVzc2lvbnMjcmVndWxhci1leHByZXNzaW9ucykgcGVybWV0dGVudCBkJ3V0aWxpc2VyIGxlcyBbZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzXSgjZXhwcmVzc2lvbikuICANCg0KPC9icj4NCg0KU2Vsb24gbGUgZm9ybWF0LCBkaWZmw6lyZW50cyB0eXBlcyBkJyoqb3DDqXJhdGV1cnMqKiBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpcyBlbnRyZSBsZXMgdmFsZXVyczogIA0KCS0gT3DDqXJhdGV1cnMgYXJpdGhtw6l0aXF1ZXM6ICssIC0sICosIC8gIA0KCS0gT3DDqXJhdGV1cnMgYm9vbMOpZW5zOiA9PSwgPiwgPCAgDQogIA0KUGFyIGV4ZW1wbGU6DQoNCi0gTGUgIisiIGVudHJlIGRldXggY29udGVudXMgbnVtw6lyaXF1ZXMgPSBzb21tZQ0KDQohW10oaW1hZ2VzL09SMzAuanBnKQ0KDQotIExlICIrIiBhdmVjIHVuIGNvbnRlbnUgdGV4dHVlbCA9IGNvbmNhdMOpbmF0aW9uDQoNCiFbXShpbWFnZXMvT1IzMS5qcGcpDQoNCjwvYnI+DQoNCi0gQ2hhcXVlIGNhcmFjdMOocmUgY29tcG9zYW50IHVuZSB2YWxldXIgZXN0IG9yZG9ubsOpIGRhbnMgdW4gaW5kZXggKirDoCBwYXJ0aXIgZGUgMCoqICgxZXIgw6lsw6ltZW50KSBldCBwZXV0IMOqdHJlIGNpYmzDqSBncsOiY2UgYXV4IGBbIF1gLg0KLSBEZSBsYSBtw6ptZSBmYcOnb24sIGNoYXF1ZSDDqWzDqW1lbnQgZCd1biAqYXJyYXkqIGVzdCBvcmRvbm7DqSBkYW5zIHVuIGluZGV4ICoqw6AgcGFydGlyIGRlIDAqKiAoMWVyIMOpbMOpbWVudCkgZXQgcGV1dCDDqnRyZSBjaWJsw6kgZ3LDomNlIGF1eCBgWyBdYC4gIA0KDQo+IGB2YWx1ZS5zcGxpdCgnKCcpWzFdYCAtPiBNb250csOpYWwgKFF1w6liZWMpID0gPyAgDQo+IGB2YWx1ZS5zcGxpdCgnKCcpWzFdLnNwbGl0KCcpJylbMF1gIC0+IE1vbnRyw6lhbCAoUXXDqWJlYykgPSA/ICANCg0KPC9icj4NCg0KDQohW10oaW1hZ2VzL09SMjUuanBnKQ0KDQo8L2JyPg0KDQoNCiFbXShpbWFnZXMvT1IyNi5qcGcpDQoNCjwvYnI+DQoNCsOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWVyIC0+IGB2YWx1ZS5zcGxpdCgiOyAiKS5zbGljZSgxKS5qb2luKCI7ICIpYCANCg0KIVtdKGltYWdlcy9PUjI3LmpwZykNCg0KPC9icj4NCg0KDQohW10oaW1hZ2VzL09SMjguanBnKQ0KDQo8L2JyPg0KDQrDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1lciAtPiBgdmFsdWUuc3BsaXQoL1xuLykuc2xpY2UoMSkuam9pbigiOyAiKWAgDQoNCiFbXShpbWFnZXMvT1IyOS5qcGcpDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCkNyw6llciB1bmUgZmFjZXR0ZSBzdXIgbGEgY29sb25uZSAqQ29kZSBkZSBsaWV1KiBwb3VyIGlkZW50aWZpZXIgbGVzIGNhcyBkb250IGxhIHZhbGV1ciBjb21tZW5jZSBwYXIgIkPDtHRlIiAgDQoNCmB2YWx1ZS5zdGFydHNXaXRoKOKAnEPDtHRl4oCdKWAgICAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpDcsOpZXIgdW5lIGZhY2V0dGUgcG91ciBpZGVudGlmaWVyIGxlcyBjYXMgZG9udCBsYSB2YWxldXIgZGFucyBsZSBjb2xvbm5lICpDYXVzZSBwcmltYWlyZSogZXN0IGxhIG3Dqm1lIHF1ZSBkYW5zIGxhIGNvbG9ubmUgKkNhdXNlIHNlY29uZGFpcmUqDQoNCmB2YWx1ZSA9PSBjZWxsc1siQ2F1c2Ugc2Vjb25kYWlyZSJdLnZhbHVlYCAgIA0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KQ3LDqWVyIHVuZSBmYWNldHRlIHBvdXIgbGlzdGVyIGxlcyBjYXMgc2Vsb24gbCcqaGV1cmUgZGUgbCdpbmNpZGVudCogc2V1bGVtZW50LCBzYW5zIGxlcyBtaW51dGVzICgyIHByZW1pZXJzIGNhcmFjdMOocmVzKS4gQ29tbWVudCBmYWlyZSBhZmZpY2hlciBsZXMgbWludXRlcyBzZXVsZW1lbnQ/Xlt2YWx1ZVszLDVdIG91IHZhbHVlLnN1YnN0cmluZygzKV0gDQoNCmB2YWx1ZVswLDJdYCAgIA0KDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQoNCioqKg0KDQo8L2JyPg0KDQojIDEwLiAgVHJhbnNmb3JtYXRpb25zDQoNCi0gT3BlblJlZmluZSBwZXJtZXQgZCdleHBsb3JlciBtYWlzIGF1c3NpIGRlIG1vZGlmaWVyIHNlcyBkb25uw6llcyBzYW5zIGF2b2lyIMOgIHRvdWNoZXIgYXUgY29udGVudSBkZSBjZWxsdWxlcyBtYW51ZWxsZW1lbnQuICANCg0KLSBDb21tZSBwb3VyIGxlcyBmYWNldHRlcywgbGVzIGZvbmN0aW9ucyBkZSB0cmFuc2Zvcm1hdGlvbiBwZXV2ZW50IHNlIGZhaXJlIGRlIGRldXggZmHDp29uczogICAgDQoNCiAgMS4gVHJhbnNmb3JtYXRpb25zIGF1dG9tYXRpc8OpZXMgKGBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzYCkgKipbMl0qKjogZm9uY3Rpb25zIHBlcm1ldHRhbnQgZCdhcHBsaXF1ZXIgZGVzIG1vZGlmaWNhdGlvbnMgY291cmFudGVzIHN1ciBsZSBmb3JtYXQgZXQgbGEgc3RydWN0dXJlIGRlcyBjZWxsdWxlcy9jb2xvbm5lcy4gIA0KICANCiAgMi4gVHJhbnNmb3JtYXRpb25zIG1hbnVlbGxlcyBkYW5zIGxhIGZlbsOqdHJlIEdSRUwgKipbMV0qKiBhZmluIGQnYWxsZXIgYmVhdWNvdXAgcGx1cyBsb2luLiAgDQogIA0KDQohW10oaW1hZ2VzL09SMjQuanBnKQ0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KUG91ciB2b2lyIGxhIHN5bnRheGUgY29ycmVzcG9uZGFudCDDoCBjaGFxdWUgZm9uY3Rpb24gZGUgYHRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXNgLCBhcHBsaXF1ZXIgbGEgZm9uY3Rpb24gc3VyIHVuZSBjb2xvbm5lIHB1aXMgYWxsZXIgdm9pciBsJ2hpc3RvcmlxdWUuIFBhciBleGVtcGxlOiBgdmFsdWUudG9OdW1iZXIoKWAsIGB2YWx1ZS50b1RpdGxlY2FzZSgpYCwgYHZhbHVlLnRvTnVtYmVyKClgLCBgdmFsdWUudG9VcHBlcmNhc2UoKWAsIGB2YWx1ZS50cmltKClgLi4uIDwvZGl2Pg0KDQoqKioNCg0KIyMgMTAuMSBDcsOpZXIgZXQgY29waWVyIGRlcyBjb2xvbm5lcw0KDQo8L2JyPg0KDQpgw4lkaXRlciBsYSBjb2xvbm5lIC0+IEFqb3V0ZXIgdW5lIGNvbG9ubmUgZW4gZm9uY3Rpb24gZGUgY2V0dGUgY29sb25uZWANCg0KIVtdKGltYWdlcy9PUjMyLmpwZykNCg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KQ3LDqWVyIHVuZSBub3V2ZWxsZSBjb2xvbm5lIHN1ciBsYSBiYXNlIGRlIGxhIGNvbG9ubmUgKkpvdXIgZGUgbGEgc2VtYWluZSogaW5kaXF1YW50IHNpIGxlIGpvdXIgZXN0IGVuIHNlbWFpbmUgb3UgZmluIGRlIHNlbWFpbmUuDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpgaWYodmFsdWUgPiA1LCJmaW4gZGUgc2VtYWluZSIsInNlbWFpbmUiKWANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KQ3LDqWVyIHVuZSBjb2xvbm5lIMOgIHBhcnRpciBkZSBsYSBjb2xvbm5lICpoZXVyZSBkZSBsJ2luY2lkZW50KiBlbiBuZSBjb25zZXJ2YW50IHF1ZSBsJ2hldXJlLCBzYW5zIGxlcyBtaW51dGVzLCBldCByYWpvdXRlciBsYSBsZXR0cmUgaCBwb3VyIGRvbm5lciBwYXIgZXhlbXBsZSBjZWNpOiAxNToxMiAgLT4gIDE1aC4gIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KYHZhbHVlLnNwbGl0KCc6JylbMF0gKyAiaCJgLiAgDQoNCk91DQoNCmB2YWx1ZS5zcGxpdEJ5TGVuZ3RocygyKVswXWAuICANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKiogDQoNCjwvYnI+DQoNCiMjIDEwLjIuIERpdmlzZXIgbGUgY29udGVudSBkZSBjZWxsdWxlcyBtdWx0aXZhcmnDqWVzDQoNCi0gKipEZXV4IG9wdGlvbnM6ICoqICANCiAgMS4gRW4gZGl2aXNhbnQgbGUgY29udGVudSBkZXMgY2VsbHVsZXMgZW4gKipwbHVzaWV1cnMgY29sb25uZXMqKjogYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBEaXZpc2VyIGVuIHBsdXNpZXVycyBjb2xvbm5lc2AgIA0KICAyLiBFbiBkaXZpc2FudCBsZSBjb250ZW51IHN1ciAqKnBsdXNpZXVycyBsaWduZXMqKjogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IERpdmlzZXIgbGVzIGNlbGx1bGVzIG11bHRpdmFyacOpZXNgICANCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUjM3LmpwZykgIA0KDQotIExhIHByZW1pw6hyZSBvcHRpb24gZXN0IGxhIHBsdXMgZnLDqXF1ZW50ZS4gDQotIExhIGRldXhpw6htZSBvcHRpb24gYXVyYSB1biBlZmZldCBpbXBvcnRhbnQgc3VyIGxhIHN0cnVjdHVyZSBkZXMgb2JzZXJ2YXRpb25zIHB1aXNxdSdlbGxlIG11bHRpcGxpZXJhIGxlIG5vbWJyZSBkZSBsaWduZXMgcGFyIGNhcyAoY2UgcXVpIG7DqWNlc3NpdGVyYSBkZSBwYXNzZXIgw6AgbGEgdnVlIHBhciBgZW50csOpZXNgKS4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NClRyYW5zZm9ybWVyIGxhIHZhcmlhYmxlICpMaWduZSoNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCioqVW5pZm9ybWlzZXIgbGUgbm9tIGRlcyBsaWduZXM6KiogIA0KDQotIENyw6llciB1bmUgZmFjZXR0ZSBzdXIgbGEgY29sb25uZSBMaWduZS4gDQoNCi0gRGV1eCBwcm9ibMOobWVzIHNlIHBvc2VudDogMSkgbGVzIG5vbXMgZGUgbGlnbmVzIG5vbiB1bmlmb3JtZXMgZXQgMikgbGVzIHZhbGV1cnMgbXVsdGlwbGVzLiAgDQoNCi0gTm91cyBjaG9pc2lzc29ucyBkJ3VuaWZvcm1pc2VyIGxlcyB2YWxldXJzIGVuIHV0aWxpc2FudCBsZXMgbnVtw6lyb3MgZGUgbGlnbmVzIGV0IGVuIHN1cHByaW1hbnQgbGUgbW90IExpZ25lLiAgDQoNCi0gRXhwbG9yZXIgZXQgYWNjZXB0ZXIgbGVzIHJlZ3JvdXBlbWVudHMgcHJvcG9zw6lzIGF2ZWMgbGEgZm9uY3Rpb24gYEdyb3VwZWAuICANCg0KLSBTdXBwcmltZXIgbGUgbW90IGxpZ25lOiAgDQoNCiAgLSBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gcmVtcGxhY2VyYCAtPiAiTGlnbmUiIHBhcjogbmUgcmllbiBzYWlzaXIgZGFucyBsJ2VuY2FkcsOpLiAgICANCg0KLSBDbGlxdWVyIGVuc3VpdGUgZGlyZWN0ZW1lbnQgc3VyIGBlZGl0YCBzdXIgdW5lIGNlbGx1bGUgZGUgbGEgY29sb25uZSBkZSAqTGlnbmUqIC0+IHJlbWFycXVlciBsYSBwcsOpc2VuY2UgZCd1biBlc3BhY2UsIHN1cHByaW1lciBsJ2VzcGFjZSBldCBmZXJtZXIuIA0KDQotIFJhZnJhaWNoaXIgbGEgZmFjZXR0ZSBldCBvYnNlcnZlciBsJ2ltcGFjdC4gDQoNCi0gUmVtYXJxdWVyIGwnaW1wYWN0IGRlIGwnZXNwYWNlIGRhbnMgbGEgZmFjZXR0ZS4gQ2VzIGVzcGFjZXMgcGV1dmVudCDDqnRyZSBzdXBwcmltw6lzIGdyw6JjZSDDoCBsYSBmb25jdGlvbjogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMgLT4gU3VwcHJpbWVyIGxlcyBlc3BhY2VzIGRlIGTDqWJ1dCBldCBkZSBmaW5gLiAgIA0KLSBSZW1wbGFjZXIgbGVzIGNvdWxldXJzIGRlIGxpZ25lIHBhciBsZXVyIG51bcOpcm8gZGlyZWN0ZW1lbnQgZGFucyBsYSBmYWNldHRlLiAgIA0KPC9kaXY+DQoNCg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipEaXZpc2VyIGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGVuIGNyw6lhbnQgZGVzIGNvbG9ubmVzIGF2ZWMgdW5lIHNldWxlIHZhbGV1ciAgKioNCg0KLSBEYW5zIGxhIGZhY2V0dGUsIHJlbXBsYWNlciBsZXMgIi0iIHBhciBkZXMgIiwiLiAgICANCg0KLSBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IERpdmlzZXIgZW4gcGx1c2lldXJzIGNvbG9ubmVzYDoNCiAgLSBEw6lmaW5pciBsZSBzw6lwYXJhdGV1ciAiLCIgKGNlbHVpLWNpIGRpc3BhcmFpdHJhKS4gIA0KICAtIETDqWNvY2hlciBsZXMgb3B0aW9ucyAiRGV2aW5lciIgZXQgIlN1cHByaW1lciIuICANCi0gTGVzIG5vdXZlbGxlcyBjb2xvbm5lcyByZXByZW5kcm9udCBsZSBub20gZGUgbCdvcmlnaW5hbCBudW3DqXJvdMOpLiBMZXMgcmVub21tZXI6IHByZW1pZXJlLCBkZXV4aWVtZSwgdHJvaXNpZW1lLCBxdWF0cmllbWUuICANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KRGl2aXNlciBwYXIgbGVzIGxvbmd1ZXVycyBkZSBjaGFtcHMgbGEgY29sb25uZSBgTnVtw6lybyBkJ2luY2lkZW50YCBwb3VyIGVuIGNyw6llciBkZXV4IG5vdXZlbGxlczogIA0KICAxLiBVbmUgY29sb25uZSBjb250ZW5hbnQgbGUgcHJlbWllciBjYXRhY3TDqHJlIGluZGlxdWFudCBsZSB0eXBlIGQnaW5jaWRlbnQsIHNvaXQgVCAodHJhaW4pIG91IFMgKHNlcnZpY2UpLiAgDQogIDIuIFVuZSBjb2xvbm5lIGNvbnRlbmFudCBsJ2Vuc2VtYmxlIGRlcyBjYXJhY3TDqHJlcyBudW3DqXJpcXVlcyBpbmRpcXVhbnQgbGUgbnVtw6lybyBkJ2luY2lkZW50LiAgDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKlbDqXJpZmljYXRpb25zIHByw6lhbGFibGVzOioqDQogIDEuIFbDqXJpZmllciBxdSdpbCBuJ3kgYSBwYXMgZGUgZG91YmxvbiBkYW5zIGNldHRlIGNvbG9ubmU6IGBGYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgLT4gRmFjZXR0ZSBkb3VibG9uYCAtPiBRdWVsIGVzdCBsZSBwcm9ibMOobWU/ICBDbGlxdWVyIHN1ciBgQ2hhbmdlcmAgZXQgYW5hbHlzZXIgbCdleHByZXNzaW9uLiAgDQogIDIuIFbDqXJpZmllciBsYSBsb25ndWV1ciBkZSBjaGFxdWUgY2FzOiAgYEZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyAtPiBGYWNldHRlIGxvbmd1ZXVyIGR1IHRleHRlYC4gICAgDQoNCioqRGl2aXNlciBsYSBjb2xvbm5lOioqICANCi0gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBEaXZpc2VyIGVuIHBsdXNpZXVycyBjb2xvbm5lcyBzZWxvbiBsZXMgbG9uZ3VldXJzIGRlIGNoYW1wc2AgOiAxLCA4LiAgICANCi0gRMOpY29jaGVyIDogZGV2aW5lciBsZSB0eXBlIGRlIGNlbGx1bGUgZXQgU3VwcHJpbWVyIGNldHRlIGNvbG9ubmUuICAgIA0KLSBSZW5vbW1lciBsZXMgY29sb25uZXMgOiBUeXBlIGV0IElELiAgICANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMjIFJlY2hlcmNoZXIvcmVtcGxhY2VyIHVuIGNhcmFjdMOocmUgZGFucyB0b3V0ZXMgbGVzIGNvbG9ubmVzIGF2ZWMgR1JFTA0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KUmVtcGxhY2VyIGxlcyB2YWxldXJzICIjIiBkYW5zIHRvdXRlIGxhIGJhc2UgZGUgZG9ubsOpZXMgcGFyICJhdWN1biIqKiAgIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBRdWVsIHByb2Jsw6htZSBjZSByZW1wbGFjZW1lbnQgcGV1dC1pbCBwcm92b3F1ZXI/ICAgIA0KLSBFeHBsb3JlciBsJ2ltcGFjdCBkZXMgdHJvaXMgZXhwcmVzc2lvbnMgZGUgcmVtcGxhY2VtZW50IHN1aXZhbnRlczogIA0KDQoxLiBgdmFsdWUucmVwbGFjZSgiIyIsICJhdWN1biIpYCAgIA0KKHJlbXBsYWNlIGxlIGNhcmFjdMOocmUgIzogYXVjdW4gZXQgYXVjdW5OL0QgKSAgICAgDQogDQoyLiBgaWYodmFsdWUuY29udGFpbnMoIiMiKSwiYXVjdW4iLCB2YWx1ZSlgICAgDQoocmVtcGxhY2UgbGVzIGNlbGx1bGVzIGRlcyAjIGV0ICNORCBwYXIgYXVjdW4pICANCg0KMy4gYGlmKHZhbHVlPT0oIiMiKSwiYXVjdW4iLCB2YWx1ZSlgICAgICANCihyZW1wbGFjZSBzZXVsZW1lbnQgbGVzIGNlbGx1bGVzICMsIHBhcyBsZXMgI05EIHBhciBhdWN1bikgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCjwvYnI+DQoNCiMjIDEwLjMuIEZ1c2lvbm5lciBsZSBjb250ZW51IGRlIHBsdXNpZXVycyBjb2xvbm5lcw0KDQojIyMgRMOpZml0ICAgDQpOb3VzIHNvdWhhaXRvbnMgY2FsY3VsZXIgbGEgZHVyw6llIGRlcyBpbmNpZGVudHMuIFBvdXIgY2UgZmFpcmUgbm91cyBjcsOpZXJvbnMgZGV1eCBjb2xvbm5lczogIA0KLSBVbmUgY29sb25uZSBmdXNpb25uYW50IGxlcyBjb2xvbm5lczogKkFubsOpZSBjaXZpbGUqLCAqTW9pcyBjYWxlbmRyaWVyKiwgKmpvdXJzIGR1IG1vaXMqIGV0ICpIZXVyZSBkZSBsJ2luY2lkZW50Ki4gIA0KLSBVbmUgY29sb25uZSBmdXNpb25uYW50IGxlcyBjb2xvbm5lczogKkFubsOpZSBjaXZpbGUqLCAqTW9pcyBjYWxlbmRyaWVyKiwgKmpvdXJzIGR1IG1vaXMqIGV0ICpIZXVyZSBkZSBsJ2luY2lkZW50Ki4gIA0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KTG9yc3F1ZSBsJ29uIGZ1c2lvbm5lIGRlcyBjb2xvbm5lcywgaWwgZmF1dCBwb3J0ZXIgdW5lIGF0dGVudGlvbiBwYXJ0aWN1bGnDqHJlIGF1IHPDqXBhcmF0ZXVyIGNob2lzaS4gTmUgcGFzIHV0aWxpc2VyIHVuIGNhcmFjdMOocmUgcXVpIHBvdXJyYWl0IGZhaXJlIHBhcnRpIGR1IGNvbnRlbnUgKGV4OiAsKSBvdSBxdWkgc2VydmlyYSDDoCBkaXZpc2VyIGxlcyBjb2xvbm5lcyAoLmNzdikNCjwvZGl2Pg0KDQo8L2JyPg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KMS4gKipGb25jdGlvbiBhdXRvbWF0aXPDqWUqKiAtPiBGdXNpb25uZXIgbGVzIGNvbG9ubmVzOiAqQW5uw6llIGNpdmlsZSosICpNb2lzIGNhbGVuZHJpZXIqLCAqam91cnMgZHUgbW9pcyogZXQgKkhldXJlIGRlIGwnaW5jaWRlbnQqDQo8L2Rpdj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gQW5uw6llIGNpdmlsZSAtPiBgw4lkaXRlciBsYSBjb2xvbm5lYCAtPiBgSm9pbmRyZSBsZXMgY29sb25uZXNgLiAgICANCi0gSm9pbmRyZSBkZXMgY29sb25uZXMgLT4gQ29jaGVyIGxlcyBjb2xvbm5lcyB2b3VsdWVzLiAgDQotIFPDqXBhcmF0ZXVyIGVudHJlIGxlIGNvbnRlbnUgZGUgY2hhcXVlIGNvbG9ubmU6ICItIi4gICAgDQotIMOJY3JpcmUgbGUgcsOpc3VsdGF0IGRhbnMgdW5lIG5vdXZlbGxlIGNvbG9ubmUgbm9tbcOpZTogKkRhdGUqLiAgICANCg0KLSBUcmFuc2Zvcm1lciBlbiBmb3JtYXQgZGF0ZTogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMgLT4gRW4gZGF0ZWAuICAgIA0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQoyLiAqKkZlbsOqdHJlIEdSRUwqKiAtPiBGdXNpb25uZXIgbGVzIGNvbG9ubmVzOiAqQW5uw6llIGNpdmlsZSosICpNb2lzIGNhbGVuZHJpZXIqLCAqam91cnMgZHUgbW9pcyogZXQgKkhldXJlIGRlIHJlcHJpc2UqDQo8L2Rpdj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gQW5uw6llIGNpdmlsZSAtPiDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gQWpvdXRlciB1bmUgY29sb25uZSBlbiBmb25jdGlvbiBkZSBjZXR0ZSBjb2xvbm5lOiAgDQoNCmBjZWxsc1siQW5uw6llIGNpdmlsZSJdLnZhbHVlICsgIi0iICsgIjAiICsgY2VsbHNbIk1vaXMgY2FsZW5kcmllciJdLnZhbHVlICsgIi0iICsgIjAiICsgY2VsbHNbIkpvdXIgZHUgbW9pcyJdLnZhbHVlICsgIiAiICsgIGNlbGxzWyJIZXVyZSBkZSBsJ2luY2lkZW50Il0udmFsdWVgLiAgDQoNCi0gVsOpcmlmaWVyIGxhIHRyYW5zZm9ybWF0aW9uIGF2ZWMgdW5lIGZhY2V0dGUgYHZhbHVlLnR5cGUoKWAuICANCg0KLSBSZWNvbW1lbmNlciBsYSBqb2ludHVyZSBwb3VyIGNyw6llciB1bmUgY29sb25uZSBhdmVjIGxhIGRhdGUtaGV1cmUgZGUgZmluIGRlIGwnaW5jaWRlbnQNCmBjZWxsc1siQW5uw6llIGNpdmlsZSJdLnZhbHVlICsgIi0iICsgIjAiICsgY2VsbHNbIk1vaXMgY2FsZW5kcmllciJdLnZhbHVlICsgIi0iICsgIjAiICsgY2VsbHNbIkpvdXIgZHUgbW9pcyJdLnZhbHVlICsgIiAiICsgIGNlbGxzWyJIZXVyZSBkZSBsJ2luY2lkZW50Il0udmFsdWVgLiAgDQoNCi0gVHJhbnNmb3JtZXIgZW4gZm9ybWF0IGRhdGU6IGDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzIC0+IEVuIGRhdGVgLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCkNhbGN1bGVyIGxhIGR1csOpZSBkZSBsJ2luY2lkZW50ICANCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KLSBDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgdmlkZTogIA0KYEVkaXQgQ29sdW1uID4gQWRkIENvbHVtbiBCYXNlZCBvbiBUaGlzIENvbHVtbiBgIC0+IENob2lzaXIgdW4gbm91dmVhdSBub20gZXQgbGUgY29udGVudTogIiIuICANCg0KLSBQb3VyIGNhbGN1bGVyIHVuZSBkaWZmw6lyZW5jZSBlbnRyZSBkYXRlOiBgZGlmZihkYXRlMSwgZGF0ZTIsICJyZXN1bHRzIGZvcm1hdCIpYC4gICAgDQoNCmBkaWZmKGNlbGxzWydkYXRlMiddLnZhbHVlLGNlbGxzWydkYXRlMSddLnZhbHVlLCAnbWludXRlcycpYC4gICANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KDQo8L2JyPg0KDQojIDExLiBMZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIHsjZXhwcmVzc2lvbn0NCg0KPC9icj4NCg0KLSBMJ3VzYWdlIGRlIEdSRUwgcGVybWV0IGRlcyBtYW5pcHVsYXRpb25zIGRlIGRvbm7DqWVzIGJlYXVjb3VwIHBsdXMgYXZhbmPDqWVzIHF1ZSBsJ3V0aWxpc2F0aW9uIGRlcyBmb25jdGlvbnMgYXV0b21hdGlzw6llcywgbWFpcyBPcGVuUmVmaW5lIHBlcm1ldCBlbiBwbHVzIGRlIGNvbWJpbmVyIGwndXRpbGlzYXRpb24gZGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyBhdmVjIEdSRUwgcG91ciBlbiBhdWdtZW50ZXIgbGEgcHVpc3NhbmNlLiANCi0gTGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyBwZXJtZXR0ZW50LCDDoCBwYXJ0aXIgZCd1bmUgc3ludGF4ZSBzcMOpY2lmaXF1ZSwgZCdpZGVudGlmaWVyIGRlcyBwYXR0ZXJucyBkYW5zIHVuIGNvbnRlbnUuICANCi0gTG9yc3F1J3V0aWxpc8OpZXMgYXZlYyBHUkVMLCBjZXMgZXhwcmVzc2lvbnMgcGVybWV0dGVudCBkb25jIGQnaWRlbnRpZmllciBldCBkJ2V4dHJhaXJlIGRlcyBjb250ZW51cyB0csOocyBwcsOpY2lzIHBvdXIgZW5zdWl0ZSBsZXMgbWFuaXB1bGVyIHNlbG9uIGxlcyBiZXNvaW5zLiAgDQotIEVsbGVzIHBldXZlbnQgw6p0cmUgdXRpbGlzw6lzIMOgIGRpZmbDqXJlbnRzIGVuZHJvaXRzIGRhbnMgT3BlblJlZmluZSBldCBkb2l2ZW50IHRvdWpvdXJzIMOqdHJlIGVudG91csOpZXMgZGUgYC8gL2A6IGZpbHRyZXMsIGZhY2V0dGVzLCBmZW7DqnRyZSBHUkVMLg0KLSBDZXJ0YWluZXMgZXhwcmVzc2lvbnMgcGV1dmVudCBzJ8OpY3JpcmUgZW4gR1JFTCBhdmVjIG91IHNhbnMgcmVnZXguICANCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUjMzLmpwZykNCg0KPC9icj4NCg0KLSBNYWlzIGNlcnRhaW5lcyBmb25jdGlvbnMgKGNvbW1lIGBtYXRjaGApIG4nYWNjZXB0ZW50IHF1ZSBjZXMgZXhwcmVzc2lvbnMuICANCjwvYnI+DQoNClBvdXIgZW4gc2F2b2lyIHBsdXM6ICANCi0gaHR0cHM6Ly9naXRodWIuY29tL09wZW5SZWZpbmUvT3BlblJlZmluZS93aWtpL1VuZGVyc3RhbmRpbmctUmVndWxhci1FeHByZXNzaW9ucyAgDQotIGh0dHBzOi8vcmVnZXgxMDEuY29tLyAgDQoNCjwvYnI+DQoNCg0KDQojIyMgRXhlcmNpY2U6IGRpdmlzZXIgbGVzIMOpbMOpbWVudHMgZGUgcsOpZsOpcmVuY2VzIGJpYmxpb2dyYXBoaXF1ZXMgZW4gZm9ybWF0IEFQQQ0KDQohW10oaW1hZ2VzL09SMzYuanBnKQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KMS4gQWxsZXIgc3VyIGxlIFtndWlkZSBBUEFdKGh0dHBzOi8vYmliLnVtb250cmVhbC5jYS9jaXRlci9zdHlsZXMtYmlibGlvZ3JhcGhpcXVlcy9hcGE/dGFiPTMyODEpLiAgICAgDQoyLiBDb3BpZXIgbGVzIGRldXggcsOpZsOpcmVuY2VzIGRlIExlbWFpcmUgZXQgTGVib3ZpY2kgYXUgcG9pbnQgMi4xLiAgICAgIA0KMy4gRGFucyBPcGVuUmVmaW5lLCBjbGlxdWVyIHN1ciBsZSBwZXRpdCBsb2dvIGVuIGhhdXQgw6AgZ2F1Y2hlIC0+IGBDcsOpZXIgdW4gcHJvamV0YCAtPiBgUHJlc3NlLXBhcGllcmA6IENvbGxlciBsZXMgZGV1eCByw6lmw6lyZW5jZXMgZW4gIGFqb3V0YW50IHVuIHPDqXBhcmF0ZXVyICoqIjsiKiogw6AgbGEgZmluIGRlIGxhIHByZW1pw6hyZSAtPiBTdWl2YW50LiAgICAgICANCg0KNC4gTW9kaWZpZXIgbGVzIG9wdGlvbnM6IA0KICAtIExlcyBjb2xvbm5lcyBzb250IHPDqXBhcsOpZXMgcGFyICI7Ii4gIA0KICAtIETDqWNvY2hlciBsYSBvdSBsZXMgcHJlbWnDqHJlcy4gICANCjUuIENyw6llciBwcm9qZXQuICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCjYuIGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gQWpvdXRlciB1bmUgY29sb25uZSBlbiBmb25jdGlvbiBkZSBjZXR0ZSBjb2xvbm5lYCAgDQoNCjcuIEV4YW1pbmVyIGwnaW1wYWN0IGRlIGNlcyBkZXV4IGNvbW1hbmRlcyAqKkdSRUwgKyByZWdleCoqLiBRdSdlc3QtY2UgcXVpIHNlIHBhc3NlPw0KDQo8L2JyPg0KDQo+IGB2YWx1ZS5maW5kKC9cKC4qP1wpLylgICANCg0KPiBgdmFsdWUuZmluZCgvXCguKj9cKS8pLmpvaW4oJywnKS5yZXBsYWNlKCIoIiwiICIpLnJlcGxhY2UoIikiLCAiIilgICANCg0KPC9icj4NCg0KICAtIENyw6llciBsYSBjb2xvbm5lIEF1dGV1ciA6IGB2YWx1ZS5wYXJ0aXRpb24oIigiKVswXWAgb3UgYHZhbHVlLnNwbGl0KCIoIilbMF1gICAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgQW5uw6llOiBgdmFsdWUucGFydGl0aW9uKCIoIilbMl0ucGFydGl0aW9uKCIpIilbMF1gICAgb3UgYXZlYyByZWdleDogYHZhbHVlLm1hdGNoKC8uKj8oXGR7NH0pLio/LylbMF1gLiAgICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSB0aXRyZTogYHZhbHVlLnBhcnRpdGlvbigiKS4iKVsyXS5wYXJ0aXRpb24oIigiKVswXWAuICAgICAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgw6lkaXRldXI6IGB2YWx1ZS5wYXJ0aXRpb24oIikuIilbMl0ucGFydGl0aW9uKCIpLiIpWzJdYC4gICAgIA0KICAtIENyw6llciBsYSBjb2xvbm5lIMOpZGl0aW9uOiBgdmFsdWUucGFydGl0aW9uKCIpLiIpWzJdLnBhcnRpdGlvbigiKCIpWzJdLnBhcnRpdGlvbigiw6lkIilbMF1gIG91IGF2ZWMgcmVnZXg6IGB2YWx1ZS5tYXRjaCgvLiooXGQrKS4gw6lkLiovKVswXWAuICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSB2b2x1bWU6IGB2YWx1ZS5wYXJ0aXRpb24oInZvbC4iKVsyXS5wYXJ0aXRpb24oIikiKVswXWAgb3UgYXZlYyByZWdleDogYHZhbHVlLm1hdGNoKC8uKnZvbC4gKFxkKykuKi8pWzBdYC4gIA0KQXZlYyByZWdleDogIA0KLSBTdXBwcmltZXIgbGVzIGxldHRyZXMgZHUgcHLDqW5vbTogYHZhbHVlLnJlcGxhY2UoLyhcc1tBLVpdLlxzKXwoXHNbQS1aXS4sXHMpLywgIiAiKWAuICANCi0gU3VwcHJpbWVyIHRvdXQgbGUgY29udGVudSBzYXVmIGxlcyBub21zIGRlIGZhbWlsbGVzOiBgdmFsdWUucmVwbGFjZSgvKFxzW0EtWl0uXHMpfChcc1tBLVpdLixccyl8KGV0KXwoLCkvLCAiICIpYC4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQojIDEyLiBUcmFuc3Bvc2l0aW9uDQoNCiMjIEV4ZXJjaWNlOiB0cmFuc3Bvc2VyIHVuIHRhYmxlYXUgZCdpbmRpY2F0ZXVycyBkdSBXREkNCjwvYnI+DQoNCioqRmljaGllciBvcmlnaW5hbCB0w6lsw6ljaGFyZ8OpIGRlIGxhIFtCYW5xdWUgbW9uZGlhbGVdKGh0dHBzOi8vZGF0YWJhbmsuYmFucXVlbW9uZGlhbGUub3JnL3JlcG9ydHMuYXNweD9zb3VyY2U9d29ybGQtZGV2ZWxvcG1lbnQtaW5kaWNhdG9ycykgZW4gZm9ybWF0IC5jc3YgY29tcG9zw6kgZGUgNSBwYXlzIGV0IDQgaW5kaWNhdGV1cnMgw6AgbCdob3Jpem9udGFsIGV0IDMgYW5uw6llcyDDoCBsYSB2ZXJ0aWNhbGUqKiAgDQoNCiFbXShpbWFnZXMvT1ItdHJhbnNwb3NlMS5qcGcpDQoNCjwvYnI+DQoNCioqMS4gVHJhbnNwb3NlciBsZXMgZGF0ZXMgw6AgbCdob3Jpem9udGFsZSAoZm9ybWF0ICpsb25nKikqKiAgDQoNCjwvYnI+DQoNCirDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc3Bvc2VyIC0+IFRyYW5zcG9zZXIgbGVzIGNlbGx1bGVzIGRlIHBsdXNpZXVycyBjb2xvbm5lcyBlbiBsaWduZXMuLi4qDQoNCg0KPC9icj4NCg0KDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTIuanBnKQ0KDQo8L2JyPg0KDQoNCiFbXShpbWFnZXMvT1ItdHJhbnNwb3NlMy5qcGcpDQoNCjwvYnI+DQoNCioqMi4gUmVtcGxpciBhdXRvbWF0aXF1ZW1lbnQgbGVzIGNlbGx1bGVzIHZpZGVzIGRlcyBkZXV4IGNvbG9ubmVzIMOgIGxhIHZlcnRpY2FsZSoqDQoNCirDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBSZWNvcGllciBsZXMgdmFsZXVycyBkYW5zIGxlcyBjZWxsdWxlcyB2aWRlcyBjb25zw6ljdXRpdmVzKg0KDQo8L2JyPg0KDQoqKjMuIFRyYW5zcG9zZXIgbGVzIGluZGljYXRldXJzIGVuIHZhcmlhYmxlcyDDoCBsYSB2ZXJ0aWNhbGUqKg0KDQoqVHJhbnNwb3NlciAtPiBDb252ZXJ0aXIgZW4gbGlzdGUgbGVzIGNvbG9ubmVzIGRlIGNsw6kvdmFsZXVyLi4uKg0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTQuanBnKQ0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTUuanBnKQ0KDQo8L2JyPg0KDQoNCioqKg0KDQojIDEzLiBFeHBvcnRlciB1biBmaWNoaWVyIGV0IGZlcm1lciBPcGVuUmVmaW5lDQoNCi0gRm9uY3Rpb24gw6AgdXRpbGlzZXIgbG9yc3F1ZSBsJ29uIGVzdCBwcsOqdCDDoCBleHBvcnRlciBzb24gZmljaGllciBlbiBkaWZmw6lyZW50cyBmb3JtYXRzIHBvdXIgdHJhdmFpbGxlciBkYW5zIHVuIGF1dHJlIGxvZ2ljaWVsICguY3N2LCAueGxzLi4uKQ0KLSBPUiBzYXV2ZWdhcmRlIGF1dG9tYXRpcXVlbWVudCBsZXMgZmljaGllcnMgc291cyBmb3JtZSBkJ2FyY2hpdmVzIGRlIHByb2pldCBkYW5zIHVuIGRvc3NpZXIgc3VyIGxlIHBvc3RlIGRlIHRyYXZhaWwgYXV4cXVlbGxlcyBvbiBwZXV0IGFjY8OpZGVyIGVuIGNsaXF1YW50IHN1ciBgT3V2cmlyIHVuIHByb2pldGAgc3VyIGxhIHBhZ2UgcHJpbmNpcGFsZS4NCi0gTCdvdXRpbCBgRXhwb3J0ZXVyIHRhYnVsYWlyZSBwZXJzb25uYWxpc8OpYCBlc3QgdHLDqHMgdXRpbGUgcG91ciBwYXJhbcOpdHJlciBsJ2V4cG9ydGF0aW9uIChzw6lsZWN0aW9uIGRlIGNvbG9ubmVzLCBmb3JtYXQgZGUgZGF0ZXMsIGZvcm1hdCBkZSBmaWNoaWVyLi4uKQ0KLSBGZXJtZXIgbCdvbmdsZXQgbmUgZmVybWUgcGFzIGxlIHNlcnZldXIgcXVpIGNvbnRpbnVlcmEgw6Agcm91bGVyIGVuIGFycmnDqHJlIHBsYW4uDQotIEFsbGVyIMOgIGxhIGZlbsOqdHJlIG5vaXJlIGR1IHRlcm1pbmFsIGV0IHV0aWxpc2VyIGxlcyB0b3VjaGVzIENUUkwgKyBDIGp1c3F1J8OgIGNlIHF1J2VsbGUgc2UgZnJtZSBkJ2VsbGUtbcOqbWUgKGlsIGVzdCBwYXJmb2lzIG7DqWNlc3NhaXJlIGRlIHLDqXDDqXRlciDDoCBwbHVzIGQndW5lIHJlcHJpc2UpLiBMZSBmaWNoaWVyIHNlcmEgZW5yZWdpc3Ryw6kgdW5lIGRlcm5pw6hyZSBmb2lzIGV0IGxlIGxvZ2ljaWVsIHNlcmEgIG1haW50ZW5hbnQgYmVsIGV0IGJpZW4gZmVybcOpLg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDE0LiBQb3VyIGZhaXJlIGR1cmVyIGxlIHBsYWlzaXIhDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIEV4dHJhaXJlIHNldWxlbWVudCBjZXJ0YWlucyBjYXJhY3TDqHJlcyBzZWxvbiBsZXVyIHBvc2l0aW9uDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCkV4dHJhaXJlIHNldWxlbWVudCBsZXMgY2FyYWN0w6hyZXMgZGUgNSDDoCA3ICANCg0KLSB2YWx1ZVs1LCA3XQ0KDQpFeHRyYWlyZSBsZXMgY2FyYWN0w6hyZXMgw6AgcGFydGlyIGRlIDUgIA0KDQotIHZhbHVlLnN1YnN0cmluZyg1KQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFNhdm9pciBzaSB1bmUgY29uZGl0aW9uIGVzdCBWcmFpZSBvdSBmYXVzc2U/DQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpFc3QtY2UgcXVlIGxlIGNvbnRlbnUgZGVzIHZhbGV1cnMgY29ycmVzcG9uZCDDoCAiMjAxOS0wMS0wMSIgIA0KDQotIHZhbHVlPT0iMjAxOS0wMS0wMSINCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBDb25uYcOudHJlIGxhIGxvbmd1ZXVyIGRlcyB2YWxldXJzIGQndW5lIGNvbG9ubmUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gdmFsdWUubGVuZ3RoKCkNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBDb21wdGVyIGxlIG5vbWJyZSBkZSBtb3RzIGRhbnMgZGVzIGNlbGx1bGVzIChzw6lwYXLDqXMgcGFyIGRlcyBlc3BhY2VzKQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSB2YWx1ZS5zcGxpdCgiICIpLmxlbmd0aCgpIG91IHZhbHVlLnNwbGl0KC9ccy8pLmxlbmd0aCgpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQ2FsY3VsIGQndW4gcG91cmNlbnRhZ2UgYXJyb25kaSAoZXggZCd1biByw6lzdWx0YXQgc3VyIDEwKQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSByb3VuZCgodmFsdWUqMTAwKSAvIDEwKQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFRyYW5zZm9ybWVyIHVuIGZvcm1hdCBkYXRlIGVuIGZvcm1hdCB0ZXh0ZSBwbHVzIGxpc2libGUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gdmFsdWUudG9TdHJpbmcoImRkIE1NTU0geXl5eSIpDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIExhIGNyw6lhdGlvbiBldCBtYW5pcHVsYXRpb24gZGUgbGlzdGVzICgqYXJyYXkqKSAtIERpdmlzZXIgbGUgY29udGVudSBkZSBjZWxsdWxlcyANCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkRpdmlzZXIgbGUgY29udGVudSBkZSBjZWxsdWxlcyBlbiBmb25jdGlvbiBkJ3VuIHPDqXBhcmF0ZXVyIHBvdXIgbmUgY29uc2VydmVyIHF1ZSBsZSBwcmVtaWVyIMOpbMOpbWVudCAgICANCg0KLSB2YWx1ZS5zcGxpdCgiICIpWzBdDQoNCkRpdmlzZXIgbGUgY29udGVudSBkJ3VuZSBjZWxsdWxlcyBwb3VyIGxlcyByw6lvcmRvbm5lciANCg0KLSB2YWx1ZS5zcGxpdCgiLCIpLnJldmVyc2UoKS5qb2luKCIsIikNCg0KLSB2YWx1ZS5zcGxpdCgiLCIpLnNvcnQoKS5qb2luKCIsIikNCg0KRGl2aXNlciBhcHLDqHMgbGVzIDMgcHJlbWllcnMgY2FyYWN0w6hyZXMgZXQgY29uc2VydmUgbGUgcHJlbWllciDDqWzDqW1lbnQgIA0KDQotIHZhbHVlLnNwbGl0QnlMZW5ndGhzKDMpWzBdIA0KDQpEaXZpc2VyIHNlbG9uIGxlIHR5cGUgZGUgY2FyYXTDqHJlcyBldCByZXRlbmlyIGxlIGRldXhpw6htZSDDqWzDqW1lbnQgIA0KDQotIHZhbHVlLnNwbGl0QnlDaGFyVHlwZSgpWzFdDQoNCkRpdmlzZXIgbGUgY29udGVudSBkJ3VuZSBjZWxsdWxlIHN1ciB1biB0ZXJtZSB4IGV0IGNvbnNlcnZlciBsZSBjb250ZW51IHByw6ljw6lkZW50IA0KDQotIHZhbHVlLnBhcnRpdGlvbigidGVybWUiKVswXQ0KDQotIHZhbHVlLnBhcnRpdGlvbigiIHRvICIpWzJdLnBhcnRpdGlvbigiIG9uICIpWzBdDQpodHRwOi8vd3d3LmRhdmlkaHV5bmgubmV0L3NwYWNlcy9uaWNhcjIwMTEvdHV0b3JpYWwucGRmDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgSW52ZXJzZXIgbGUgY29udGVudSBkJ3VuZSBjZWxsdWxlDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpEaXZpc2VyIGxlIGNvbnRlbnUgZCd1bmUgY2VsbHVsZSBldCBpbnZlcnNlciBsJ29yZHJlIGRlIHByw6lzZW50YXRpb24gZW4gYWpvdXRhbnQgdW5lIHZpcmd1bGUgZW50cmUgbGVzIGRldXggIA0KDQotIHZhbHVlLnNwbGl0KCcgJylbMV0gKyAiLCIgKyAiICIgKyB2YWx1ZS5zcGxpdCgnICcpWzBdDQoNCk9VDQoNCi0gdmFsdWUubWF0Y2goLyguKiksKC4qKS8pLnJldmVyc2UoKS5qb2luKCIgIikNCjwvZGl2Pg0KDQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIEFqb3V0ZXIgdW4gesOpcm8gcG91ciBhdm9pciB1biBub21icmUgZGUgY2FyYWN0w6hyZXMgcHLDqWNpcw0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KQWpvdXRlciB1biB6w6lybyBkZXZhbnQgbGUgY29udGVudSBzaSBkb25uZSB1bmUgY2hhw65uZSBkZSAwIMOgIDIgY2FyYWN0w6hyZXMgIA0KDQotICIwIlswLDItbGVuZ3RoKHZhbHVlKV0gKyB2YWx1ZQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIEFwcGxpcXVlciBkZXMgY29uZGl0aW9ucw0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRm9uY3Rpb24gaWYgLSBtw6ptZSBjaG9zZSBxdWUgZGFucyBleGNlbCAgDQoNCi0gaWYodGVzdCwgc2kgdGV4dCBlc3QgdnJhaSwgc2kgdGV4dCBlc3QgdnJhaSkNCg0KU2kgbGEgY2VsbHVsZSBjb250aWVudCB4LCDDqWNyaXJlIHgsIHNpbm9uIHkNCg0KLSBpZih2YWx1ZS5jb250YWlucygieCIpLCAieCIsICJ5IikNCiANCi0gaWYodmFsdWUuY29udGFpbnMoIjEiKSwgdmFsdWUsIG51bGwpDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBDb21wYXJlciBkZXV4IGNvbG9ubmVzDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpJZGVudGlmaWVyIHNpIGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGQndW5lIGNvbG9ubmUgZXN0IHBhcmVpbCDDoCB1bmUgYXV0cmUgIA0KDQotIHZhbHVlID09IGNlbGxzWydhdXRyZS1jb2xvbm5lJ10udmFsdWUNCg0KRXN0LWNlIHF1ZSBsZSBwcmVtaWVyIGNhcmFjdMOocmUgZGUgbGEgY29sb25uZSB4IGVzdCBsZSBtw6ptZSBxdWUgbGEgY29sb25uZSB5ICANCg0KLSBjZWxsc1siY29sb25uZTEiXS52YWx1ZVswXSA9PSBjZWxsc1siY29sb25uZTIiXS52YWx1ZVswXQ0KDQpDb21wYXJlciBsZSBjb250ZW51IGRlIGRldXggY29sb25uZXMgZXQgbW9kaWZpZXIgbGVzIHZhbGV1cnMgc2Vsb24gbGUgcsOpc3VsdGF0IGRlIGxhIGNvbmRpdGlvbiAgDQoNCi0gaWYoY2VsbHNbImNvbG9ubmUxIl0udmFsdWUgPT0gY2VsbHNbImNvbG9ubmUyIl0udmFsdWUsICJQYXJlaWwiLCAiUGFzIHBhcmVpbCIpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgVsOpcmlmaWVyIGxlIGZvcm1hdCBkJ3VuZSBjb2xvbm5lDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCi0gdmFsdWUudHlwZSgpICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBGYWlyZSBkZXMgY2FsY3VscyBzaW1wbGVzICh2YWxldXJzIG51bcOpcmlxdWVzKQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpTb21tZSBkJ3VuZSBjb2xvbm5lIHBsdXMgdW5lIGF1dHJlICANCg0KLSB2YWx1ZSArIGNlbGxzWydKb3VyIGR1IG1vaXMnXS52YWx1ZQ0KDQpBcnJvbmRpciBsZSBjb250ZW51ICANCg0KLSByb3VuZCh2YWx1ZSkNCjwvZGl2Pg0KDQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFJlcHJlbmRyZSBldCBjb25jYXTDqW5lciBsZSBjb250ZW51IGQndW5lIGF1dHJlIGNvbG9ubmUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkNyw6llciB1bmUgbm91dmVsbGUgY29sb25uZSBlbiBmdXNpb25uYW50IGxlIGNvbnRlbnUgZGUgZGV1eCBhdXRyZXMgZXQgYWpvdXRlciBkdSB0ZXh0ZSAgDQoNCi0gY2VsbHNbJ25vbSddLnZhbHVlICsgY2VsbHNbJ25vbSddLnZhbHVlICsgIkJvbmpvdXIhIg0KDQpDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgYXZlYyBsZXMgdHJvaXMgcHJlbWllcnMgY2FyYWN0w6hyZXMgc2V1bGVtZW50ICANCg0KLSBjZWxsc1snU3ltcHRvbWUnXS52YWx1ZVswLDNdDQoNCi0gVHJhbnNmb3JtZXIgbGUgY29udGVudSBkJ3VuZSBjb2xvbm5lIGVuIGNvbmNhdMOpbmFudCBsZSBjb250ZW51IGQndW5lIGF1dHJlICANCg0KdmFsdWUgKyAnICcgKyBjZWxsc1snc3RyZWV0LXR5cGUnXS52YWx1ZQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFJlbXBsYWNlciBkZXMgY2FyYWN0w6hyZXMNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KUmVtcGxhY2VyIHRvdXQgbGUgY29udGVudSBkJ3VuZSBjb2xvbm5lIChpY2ksIHZpZGVyIGxhIGNvbG9ubmUpICANCg0KLSB2YWx1ZS5yZXBsYWNlKHZhbHVlLCAiIikNCg0KUmVtcGxhY2VyIHVuZSBsZXR0cmUgcGFyIHVuZSBhdXRyZSAgDQoNCi0gdmFsdWUucmVwbGFjZUNoYXJzKCJvIiwgImEiKQ0KDQpGYWlyZSBwbHVzaWV1cnMgcmVtcGxhY2VtZW50cyBkJ3VuIGNvdXAgIA0KDQotIHZhbHVlLnJlcGxhY2UoIjEiLCAidW4iKS5yZXBsYWNlKCIyIiwgImRldXgiKS5yZXBsYWNlKCIzIiwgInRyb2lzIikNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBJZGVudGlmaWVyIGRlcyBjZWxsdWxlcyBxdWkgY29tbWVuY2VudCBwYXIuLi4gKHLDqXN1bHRhdCBib29sw6llbikNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KLSB2YWx1ZS5zdGFydHNXaXRoKCJCZXJyaSIpICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFN1cHByaW1lciB1biBjYXJhY3TDqHJlIGRlIGTDqWJ1dCBvdSBmaW4gZGUgdmFsZXVyOg0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQoqKlN1cHByaW1lIOKAnFPigJ0gZHUgZMOpYnV0IGRlIGxhIGNlbGx1bGUgICoqDQoNCi0gdmFsdWUucmVwbGFjZSgvXlMvLCIiKSBbcmVnZXggXiBpbmRpcXVlIGxlIGTDqWJ1dCBkJ3VuZSBjZWxsdWxlXQ0KDQoqKlN1cHByaW1lICIuIiDDoCBsYSBmaW4gZGUgbGEgY2VsbHVsZSAgKioNCg0KLSB2YWx1ZS5yZXBsYWNlKC9cLiQvLCIiKSBbcmVnZXggJCBpbmRpcXVlIGxhIGZpbiBkJ3VuZSBjZWxsdWxlXQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFRyYXZhaWxsZXIgYXZlYyB1biBmb3JtYXQgZGF0ZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRXh0cmFpcmUgc2V1bGVtZW50IHVuZSBwYXJ0aWUgZCd1bmUgZGF0ZSAgDQoNCi0gdmFsdWUudG9EYXRlKCkuZGF0ZVBhcnQoInllYXIiKSAgDQoNCi0gIGRpZmYobm93KCksdmFsdWUsJ3dlZWtzJykgIA0KDQo8L2Rpdj4NCg0KDQoqKioNCg0KPC9icj4NCg0KIyAxNS4gUmVzc291cmNlcw0KDQotIFtTaXRlIGV0IGTDqWN1bWVudGF0aW9uIG9mZmljaWVsc10oaHR0cHM6Ly9vcGVucmVmaW5lLm9yZy8pDQoNCi0gSm9obiBMaXR0bGUsIDIwMTgsIFtDbGVhbmluZyBEYXRhIHdpdGggT3BlblJlZmluZV0oaHR0cHM6Ly9saWJqb2huLmdpdGh1Yi5pby9vcGVucmVmaW5lL2luZGV4Lmh0bWwpICANCg0KLSBFdmFuIFdpbGwsIDIwMjEsIFtHZXQgU3RhcnRlZCB3aXRoIE9wZW5SZWZpbmU6IEV4cGxvcmUsIENsZWFuLCBhbmQgVHJhbnNmb3JtIHlvdXIgRGF0YSFdKGh0dHBzOi8vZXZhbndpbGwuZ2l0aHViLmlvL29wZW5yZWZpbmUtYi8pICANCg0KLSBVQ0xBLCAyMDE5LCBbR2V0dGluZyBzdGFydGVkIHdpdGggT3BlblJlZmluZSBEaWdpdGFsIEh1bWFuaXRpZXMgMjAxXShodHRwOi8vbWlyaWFtcG9zbmVyLmNvbS9jbGFzc2VzL2RoMjAxdzE5L3R1dG9yaWFscy1ndWlkZXMvZGF0YS1jbGVhbmluZy1hbmQtbWFuaXB1bGF0aW9uL2dldHRpbmctc3RhcnRlZC13aXRoLW9wZW5yZWZpbmUvKQ0KDQotIFtSZWZpbmVQcm8gS25vd2xlZGdlIEJhc2UgZm9yIE9wZW5SZWZpbmVdKGh0dHBzOi8va2IucmVmaW5lcHJvLmNvbS8pDQoNCi0gU2V0aCB2YW4gSG9vbGFuZCwgUnViZW4gVmVyYm9yZ2gsIGFuZCBNYXggRGUgV2lsZGUsIFtDbGVhbmluZyBEYXRhIHdpdGggT3BlblJlZmluZV0oaHR0cHM6Ly9wcm9ncmFtbWluZ2hpc3Rvcmlhbi5vcmcvZW4vbGVzc29ucy9jbGVhbmluZy1kYXRhLXdpdGgtb3BlbnJlZmluZSkNCg0KLSBbSW50cm9kdWN0aW9uIHRvIE9wZW5SZWZpbmVdKGh0dHBzOi8vZG9hbmEuZ2l0Ym9va3MuaW8vdGVzdC9jb250ZW50LykNCg0KLSBEYXRhIENhcnBlbnRyeSwgW0RhdGEgQ2xlYW5pbmcgd2l0aCBPcGVuUmVmaW5lIGZvciBFY29sb2dpc3RzXShodHRwczovL2RhdGFjYXJwZW50cnkub3JnL09wZW5SZWZpbmUtZWNvbG9neS1sZXNzb24vMDAtZ2V0dGluZy1zdGFydGVkL2luZGV4Lmh0bWwpDQoNCi0gT3dlbiBTdGVwaGVucywgMjAxNCwgW0ludHJvZHVjdGlvbiB0byBPcGVuUmVmaW5lXShodHRwOi8vd3d3Lm1lYW5ib3lmcmllbmQuY29tL292ZXJkdWVfaWRlYXMvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMTEvSW50cm9kdWN0aW9uLXRvLU9wZW5SZWZpbmUtaGFuZG91dC1DQy1CWS5wZGYpDQoNCi0gVmVyYm9yZ2ggZXQgRGUgV2lsZGUsIDIwMTMsIFtVc2luZyBPcGVuUmVmaW5lXShodHRwczovL3d3dy5nYmlmLmVzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE4LzAxL1VzaW5nLU9wZW5SZWZpbmVCb29rLnBkZikNCg0KLSBbTGlicmFyeSBDYXJwZW50cnk6IE9wZW5SZWZpbmVdKGh0dHBzOi8vbGlicmFyeWNhcnBlbnRyeS5vcmcvbGMtb3Blbi1yZWZpbmUvMDEtaW50cm9kdWN0aW9uL2luZGV4Lmh0bWwpDQoNCi0gW0dyYXRlZnVsIERhdGFdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY290dHl0aGVyZWQvZ3JhdGVmdWxkYXRhL3dpa2kpLA0KDQotIFtHUkVMIFJlY2lwZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9SZWNpcGVzKQ0KDQotIFtDaGVhdCBTaGVldDogUmVndWxhciBFeHByZXNzaW9ucyAmIEdSRUxdKGh0dHBzOi8vY29kZTRsaWJ0b3JvbnRvLmdpdGh1Yi5pby8yMDE4LTEwLTEyLWFjY2Vzcy9Hb29nbGVSZWZpbmVDaGVhdFNoZWV0cy5wZGYpDQoNCi0gW0V0YyFdKGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9FeHRlcm5hbC1SZXNvdXJjZXMpDQoNCg0KPHN0eWxlPg0KLnJpZ2h0IHsNCiBmbG9hdDogcmlnaHQ7DQp9DQoNCi5jZW50ZXIgew0KIGFsaWduOiBjZW50ZXI7DQp9DQoNCi5ub3RlIHsNCiAgcGFkZGluZzogMC41ZW07DQogIGJvcmRlci1zdHlsZTogc29saWQ7DQogIGJvcmRlci1jb2xvcjogZ3JlZW47DQogIGJvcmRlci13aWR0aDogdGhpbjsNCiAgZm9udC1zaXplOiA5MCU7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQp9DQoNCi5ib3gxIHsNCiAgcGFkZGluZzogMC41ZW07DQogIGJhY2tncm91bmQ6ICNlMGViZWI7DQogIGNvbG9yOiBibGFjazsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCn0NCg0KLmJveDIgew0KICBwYWRkaW5nOiAwLjVlbTsNCiAgYmFja2dyb3VuZDogIzkyYjliOTsNCiAgY29sb3I6IHdoaXRlOw0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KfQ0KLmNlbnRlciB7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KLnRpdGxlIHsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBjb2xvcjogIzAwMzM2NjsNCn0NCg0KLnN1YnRpdGxlIHsNCiAgY29sb3I6ICMwMDMzNjY7DQp9DQoNCmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIGxlZ2VuZCB7DQogIGNvbG9yOiAjNUE3QjlDOw0KfQ0KDQo8L3N0eWxlPg==